[英]Spying on asynchronous functions with jasmine
我正在使用茉莉花节点来测试我的服务器。 我想在用户类中伪造/绕过一些与验证相关的代码。 所以我会成立这样的间谍-
var user = {
email: 'email@email.com',
password: 'password'
}
spyOn(User, 'validateFields').andReturn(user);
但是validateFields函数是异步的...
User.prototype.validateFields = function(user, callback) {
// validate the user fields
callback(err, validatedUser);
}
所以我实际上需要这样的东西来伪造回调而不是返回-
var user = {
email: 'email@email.com',
password: 'password'
}
spyOn(User, 'validateFields').andCallback(null, user);
茉莉花有可能发生这种情况吗?
有两种方法。 首先,您可以进行监视,然后获取用于第一次调用间谍的参数,然后使用模拟数据调用此函数:
spyOn(User, 'validateFields')
//run your code
User.validateFields.mostRecentCall.args[1](errorMock, userMock)
另一种方法是使用sinonJS 存根 。
sinon.stub(User, 'validateFields').callsArgWith(1, errorMock, userMock);
这将立即使用模拟数据调用回调函数。
您可以传入回调函数,然后询问是否已调用此函数。
对不起,异步4年延迟响应,但我一直只是想知道如何解决类似的问题,想通了,我可以结合茉莉done
回调and.callFake
间谍法。 考虑下面的抽象样本:
describe('The delayed callback function', function(){
it('should be asynchronously called',function(done){
var mock = jasmine.createSpy('mock');
mock.and.callFake(function(){
expect(mock).toHaveBeenCalled();
done();
});
delayed(mock);
});
});
function delayed(callback){
setTimeout(function(){
callback();
},2000);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.