茉莉花:您可以近似正常的setTimeout行为吗?

时间:2018-08-25 19:56:47

标签: javascript jasmine

it("shows an alert", function(done) {
    function showAlert() {
        alert("hello");
        expect(true).toBe(true);
        done();
    }
    setTimeout(showAlert, 200);
});

当我在浏览器中运行此测试时,它不会显示警报。此外,我收到消息Error: Timeout - Async callback was not invoked within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)。如果我添加了jasmine.clock().tick(500);行,并且已经安装了时钟,那么它将正常工作。据我(不完全)了解,Jasmine有点劫持setTimeout。我实际上希望它等待0.2秒的实时时间。
如果这实际上是不可能的,我想知道我是否仍然可以使用Jasmine 3.2.1测试不涉及promises或AJAX的异步,原始JavaScript函数。我知道他们将花费多长时间,并且我也不担心运行测试套件需要多长时间。

(我的一些函数具有回调,但是即使在其他地方也不能在此上下文中使用,并且并非所有人都需要回调。)

1 个答案:

答案 0 :(得分:0)

啊哈...我从jasmine.clock().install();中删除了beforeEach(),从jasmine.clock().uninstall();中删除了afterEach(),然后按预期工作。我在尝试Clock类时放了这些语句,然后完全忘了它们在那儿。显然,Clock实际上确实劫持了JavaScript超时队列。