[英]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.