gpt4 book ai didi

angularjs - 如何使用 jasmine 测试 $timeout 操作的持续时间?

转载 作者:行者123 更新时间:2023-12-03 08:16:48 26 4
gpt4 key购买 nike

假设我在指令中具有以下匿名功能:

 $timeout(function () {
element.removeClass('highlighted')
}, 2000)

这工作成功。现在,如果我想使用 jasmine 编写一个测试,以确保在 ~2s 后删除该类,这将如何完成?

我应该补充一点,我曾尝试同时使用 jasmine.ClockwaitsFor到目前为止,在这两种情况下,测试都失败了。但是,值得注意的是,当我更改 $timeout 时至 setTimeout在我的指令中,两个测试都通过了,所以 angular 的行为似乎在这里起作用。

(注意这里使用 $timeout.flush() 不能令人满意,因为它只能证明超时完成,而不是用了多长时间)。

最佳答案

从 1.2 开始 $timeout.flush() 采用一个延迟参数来模拟类似于 jasmine.Clock 的时钟的模拟,但在某种程度上使 Angular $timeout 感到高兴。

所以这个测试会通过:

it("timeout test", function() {
$timeout(function() {
timerCallback();
}, 100);
expect(timerCallback).not.toHaveBeenCalled();
$timeout.flush(99);
expect(timerCallback).not.toHaveBeenCalled();
$timeout.flush(1);
expect(timerCallback).toHaveBeenCalled();
});

demo fiddle

关于angularjs - 如何使用 jasmine 测试 $timeout 操作的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com