2013-07-02 102 views
2

我使用茉莉花节点来测试我的服务器。我想在我的用户类中伪造/绕过一些与验证相关的代码。所以,我会成立这样的间谍 -茉莉花异步功能间谍

var user = { 
    email: '[email protected]', 
    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 protected]', 
    password: 'password' 
} 

spyOn(User, 'validateFields').andCallback(null, user); 

茉莉花就是这样的可能吗?

回答

0

您可以传递回调函数并询问是否调用了此函数。

2

有两种方法。首先,你可以窥视然后拿到args作为间谍的第一个呼叫和呼叫thisfunction与模拟数据:

spyOn(User, 'validateFields') 
//run your code 
User.validateFields.mostRecentCall.args[1](errorMock, userMock) 

另一种方法是使用sinonJS stubs

sinon.stub(User, 'validateFields').callsArgWith(1, errorMock, userMock); 

这将立即调用带模拟数据的回调函数。

0

对不起,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); 
}