我试图测试postMessage API,因为在收到消息之前存在一个小的延迟,我无法在发送消息之后运行期望值。Jasmine 2.0如何在运行期望之前等待实时
在茉莉花1.3我曾经等待()几毫秒前运行期望,并且工作正常。然而,茉莉花2.0等待()已被弃用,现在似乎setTimeout内的一切都不会运行,除非done()被调用,在我的情况下女巫不会削减它,因为我实际上想等待实时,然后运行我的期望..
不知道这一切是否有意义,如果它确实如此我会喜欢一些关于如何去做这件事的指针。 谢谢!
我试图测试postMessage API,因为在收到消息之前存在一个小的延迟,我无法在发送消息之后运行期望值。Jasmine 2.0如何在运行期望之前等待实时
在茉莉花1.3我曾经等待()几毫秒前运行期望,并且工作正常。然而,茉莉花2.0等待()已被弃用,现在似乎setTimeout内的一切都不会运行,除非done()被调用,在我的情况下女巫不会削减它,因为我实际上想等待实时,然后运行我的期望..
不知道这一切是否有意义,如果它确实如此我会喜欢一些关于如何去做这件事的指针。 谢谢!
而不是等待一些毫秒数,茉莉花挂钩等待,直到函数返回。 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();
});
});
编辑:
既然你测试你的应用程序进行特定回调,只需更换该回调了间谍,而不是像我一样创建一个新的。
茉莉花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();
}
这适用于me:
beforeAll(function (done) {
setTimeout(done, 5000);
});
beforeAll函数首先发生,但当您调用done回调函数时它会结束。所以如果你使用5000的setTimeout函数,它会等待5000毫秒,然后继续。
我有很多问题,但要开始。为什么你要测试和Ajax调用? – Dalorzo
您是使用karma还是SpecRunner.html? – Dalorzo
使用什么来创建Ajax调用? – Dalorzo