我目前刚接触Sinon,Mocha,Supertest,并且正在编写测试。在我当前的场景中,我有一个验证库,它验证我的"OTP“,并在验证之后继续在回调函数中执行操作。
我无法模拟回调以返回null,并继续测试代码的其余部分。以下是我的代码片段:
Controller.js
var authy = require('authy')(sails.config.authy.token);
authy.verify(req.param('aid'), req.param('oid'), function(err, response) {
console.log(err);
if (err) {
return res.badRequest('verification failed.');
}
....我的测试是:
var authy = require('authy')('token');
describe('Controller', function() {
before(function() {
var authyStub = sinon.stub(authy, 'verify');
authyStub.callsArgWith(2, null, true);
});
it('creates a test user', function(done) {
// This function will create a user again and again.
this.timeout(15000);
api.post('my_endpoint')
.send({
aid: 1,
oid: 1
})
.expect(201, done);
});
});实际上,我想在回调中调用authy verify get a null作为"err“,这样我就可以测试其余的代码。
任何帮助都将不胜感激。谢谢
发布于 2016-11-11 16:25:26
问题在于,您在测试和代码中使用了authy对象的不同实例。看这里,authy github repo。
在您的代码中,您需要
var authy = require('authy')(sails.config.authy.token);在你的测试中
var authy = require('authy')('token');因此,您的存根通常很好,但它永远不会像这样工作,因为您的代码不使用您的存根。
一种解决方法是允许从外部注入控制器中的authy实例。如下所示:
function Controller(authy) {
// instantiate authy if no argument passed在您的测试中,您可以这样做
describe('Controller', function() {
before(function() {
var authyStub = sinon.stub(authy, 'verify');
authyStub.callsArgWith(2, null, true);
// get a controller instance, however you do it
// but pass in your stub explicitly
ctrl = Controller(authyStub);
});
});https://stackoverflow.com/questions/40541969
复制相似问题