Javascript Jasmine 2.0如何在运行期望之前实时等待

Javascript Jasmine 2.0如何在运行期望之前实时等待,javascript,jasmine,Javascript,Jasmine,我正在尝试测试postMessage API,因为在接收消息之前有一个轻微的延迟,我无法在发送消息之后立即运行Expection 在jasmine 1.3中,在运行expectation之前,我通常会等待()几毫秒,这很好。然而,jasmine 2.0 wait()已被弃用,现在似乎setTimeout中的所有内容都不会运行,除非调用了done(),在我的情况下,witch不会将其删除,因为我实际上希望在运行预期之前实时等待 我不确定这一切是否有意义,如果有,我希望能得到一些关于我如何去做这件事

我正在尝试测试postMessage API,因为在接收消息之前有一个轻微的延迟,我无法在发送消息之后立即运行Expection

在jasmine 1.3中,在运行expectation之前,我通常会等待()几毫秒,这很好。然而,jasmine 2.0 wait()已被弃用,现在似乎setTimeout中的所有内容都不会运行,除非调用了done(),在我的情况下,witch不会将其删除,因为我实际上希望在运行预期之前实时等待

我不确定这一切是否有意义,如果有,我希望能得到一些关于我如何去做这件事的建议。
谢谢

jasmine没有等待几毫秒,而是让钩子等待函数返回。有一些很好的例子,我在这里复制了一个来展示测试ajax回调的具体方法。只需在函数中添加一个spy作为回调函数,然后等待回调函数的执行

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();
    });
});
编辑:

由于您正在测试您的应用程序是否进行了特定的回调,因此您可以使用spy替换该回调,而不是像我那样创建一个新的回调

Jasmine2.0添加了一个“done”风格的回调,因此您应该能够执行以下操作:(我还没有测试过这个的语法,但希望这是一个良好的开端)

这对我很有用:

beforeAll(function (done) {
    setTimeout(done, 5000);
});

beforeAll函数首先出现,但在调用done回调函数时将结束。因此,如果将setTimeout函数用于5000,它将等待5000毫秒,然后继续。

我有很多问题,但要开始。为什么要进行测试和Ajax调用?您使用的是karma还是SpecRunner.html?您使用的是什么来进行Ajax调用?@Dalorzo我使用testem来运行测试,我不是在测试Ajax调用,而是在测试postMessage API。从您使用post message发送消息的那一刻起,以及收到消息的那一刻起,会有一个小的延迟,比如1,2毫秒。谢谢您的输入Jeff,但在我的情况下,它不会切断它。我的公共API只是侦听来自postMessage的消息,并使用其他消息回答它们,所以我只能测试当收到某种类型的消息时,我的应用程序是否会发回相应的响应。问题是PostMessageAPI需要1,2毫秒才能到达,所以我确实需要等待。在你链接到的页面旁边是jasmine 1.3的,使用的方法是deprecated@silkAdmin我用一些额外的信息编辑了这篇文章-这有帮助吗?@silkAdmin根据提供的信息,我认为JeffStorey的方法看起来不错。我正在使用jasmine 2.0。我有空的侍者,我想看看画的东西是否画好。对我来说,我发现使用
毕竟
而不是
之前
在浏览器窗口中保留绘制的内容以等待超时时间。
beforeAll(function (done) {
    setTimeout(done, 5000);
});