我正在尝试测试postMessage API,因为在收到消息之前有一点延迟我发送消息后无法立即运行期望。
在jasmine 1.3中,我常常在运行期望之前等待()几毫秒,并且工作正常。然而,对于jasmine 2.0,wait()已被弃用,现在看来setTimeout中的所有内容都不会运行,除非调用done(),在我的情况下,女巫不会削减它,因为我实际上想要在运行我的期望之前等待实时..
不确定这一切是否有意义,如果确实如此,我会喜欢关于如何解决这个问题的一些指示。 谢谢!
答案 0 :(得分:11)
这对我有用:
beforeAll(function (done) {
setTimeout(done, 5000);
});
beforeAll函数首先发生,但是当你调用done回调函数时它会结束。因此,如果您使用5000的setTimeout函数,它将等待5000毫秒,然后继续。
答案 1 :(得分:5)
而不是等待一些毫秒,jasmine有挂钩等待函数返回。 This page有一些很好的例子,我在这里复制了一个,以显示测试ajax回调的特定方法。只需添加一个间谍作为函数的回调并等待该回调执行。
it("should make a real AJAX request", function () {
var callback = jasmine.createSpy();
makeAjaxCall(callback);
waitsFor(function() {
return callback.callCount > 0;
}, "The Ajax call timed out.", 5000);
runs(function() {
expect(callback).toHaveBeenCalled();
});
});
编辑:
由于您正在测试您的应用程序是否进行了特定回调,因此您可以使用间谍替换该回调,而不是像我一样创建新的回调。
Jasmine 2.0增加了一个“完成”样式的回调,所以你应该能够做到这样的事情:(我没有测试过这个的语法,但希望是一个好的开始)
it("should make an ajax callback with jasmine 2.0", function(done)) {
// this is the object you are testing - assume it has the ajax method you want to call and the method that gets called when the ajax method is finished
var myObject
spyOn(myObject, "callback").andCallFake(function() {
done();
});
myObject.makeAjaxCall();
}