在我使用骨干的应用程序中,我有以下功能:
handleModelSaved: function () {
var redirect_location = 'redirect_path';
App.Messenger.success('Report was saved successfully!');
setTimeout(function () {
window.location = redirect_location;
}, 2000);
}
现在我有以下测试:
describe('handleModelSaved', function () {
beforeEach(function () {
view = initV3View();
spyOn(App.Messenger, 'success');
view.handleModelSaved();
});
it("sends a success message", function () {
expect(App.Messenger.success).toHaveBeenCalledWith('Report was saved successfully!');
});
});
我的问题是,如何用Jasmine测试这段代码:
setTimeout(function () {
window.location = redirect_location;
}, 2000);
答案 0 :(得分:0)
您只需检查窗口对象上的location属性即可获得特定值。当然,只有在超时到期后才能执行此操作。您可能想要做的是使用您自己的实现覆盖setTimeout函数,该实现立即调用指定的回调函数。这样你还可以检查是否使用预期的超时调用了setTimeout。您可以自己执行此操作,也可以使用Jasmine的Clock函数来模拟本机超时函数:http://jasmine.github.io/2.0/introduction.html
另一种选择是使用作为参数传递给it()函数回调的done函数。这使得测试异步。