所以我想测试这个方法:
app.get('/test', exposeDb, function(req, res) {
req.dbService.getUserByID( function(err, result) {
if (result == 5) {
res.statusCode = 200;
}
else {
res.statusCode = 500;
}
});
});
我正在尝试将其存根,以便getUserByID方法返回一个值,所以我这样做:
describe('Test', function() {
beforeEach(function() {
var getUserByIDStubE = sinon.stub(dbService, 'getUserByID').callsFake(() => {
return 5;
});
});
it('TESTSETSTETS', function(done) {
chai.request(server)
.get('/test')
.send({})
.end(function (err, res) {
res.should.have.status(200);
});
done();
});
});
问题是,req.dbService.getUserByID中的代码永远不会被调用,因此我无法检查“result”是否等于5的逻辑。
如果我是console.log(req.dbService.getUserByID()),那确实会返回存根值5.但我不知道它在回调时是如何工作的。
如何制作它以便在我的示例中返回5(然后检查res.statusCode)?
提前致谢!
答案 0 :(得分:2)
看起来你的功能是获得一个回调并用结果调用它,而不是将结果作为你的存根返回。
试试这样:
sinon.stub(dbService, 'getUserByID').callsFake(cb => {
cb(undefined, 5);
});
答案 1 :(得分:1)
您不需要callsFake()
来获取getUserByID
tocall回调,以便您可以测试res.statusCode
是否设置正确。你想要的sinon函数是stub.yields()
,它专门用于此目的,并将使用你提供的参数调用传递给函数的第一个回调函数。
var getUserByIDStubE = sinon.stub(dbService, 'getUserByID').yields([null, 5]);
这将导致您传递给getUserByID
的回调被调用,没有错误,值为5或您想要测试的任何值。