gpt4 book ai didi

node.js - 如何测试 stub 数据库查询

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:34 26 4
gpt4 key购买 nike

我有一个看起来像这样的 Sails.Js Controller

module.exports = {
confirmID: function(req,res) {
var uid = req.params.id;
User.findOne({id:uid}).exec(function(err,user) {
// ...
});
}
}

其中 User 是一个 sails-postgres 模型。我试过用 mocha、sinon 和 supertest 来测试它,这样的测试

describe('Controller', function() {
var sandbox;

before(function() {
sandbox = sinon.sandbox.create();
sandbox.stub(User, 'findOne');
});

after(function() {
sandbox.restore();
});

describe('GET /confirmid/:id', function() {

it('should do something', function(done) {
request(sails.hooks.http.app)
.get('/confirmid/123')
.expect(200)
.end(function(err,res) {
sandbox.fakes[0].called.should.be.true;
done();
});
});
});

如果我把它留在那儿,它会出错,因为 exec 是在未定义的情况下调用的,但我似乎无法在没有错误或测试挂起的情况下 stub 嵌套的 exec 方法。有没有办法对.find().exec()等一系列方法调用进行 stub ?还是我最好将它留给集成测试,以便我可以使用实际数据库对其进行测试?

最佳答案

假设您真的想要 stub (不仅仅是监视)- 您想要控制查询解析的内容,而不是仅仅知道查询是否已执行。这是我用来 stub sails/waterline query methods 的.像...

var stubQueryMethod = require('stubQueryMethod');

describe('Controller', function() {
before(function() {
stubQueryMethod(User, 'findOne', {
id: 123,
name: 'Fred Fakes'
});
});

after(function() {
User.findOne.restore();
});

describe('GET /confirmid/:id', function() {
it('should do something', function(done) {
request(sails.hooks.http.app)
.get('/confirmid/123')
.expect(200)
.end(function(err,user) {
user.should.have.property('name', 'Fred Fakes');
done();
});
});
});
});

来源:https://gist.github.com/wxactly/f2258078d802923a1a0d

关于node.js - 如何测试 stub 数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com