gpt4 book ai didi

javascript - jasmine.Clock VS sinon.clock 我的 jasmin.Clock.useMock() 用法有什么问题?

转载 作者:行者123 更新时间:2023-11-29 20:08:29 28 4
gpt4 key购买 nike

我只是尝试使用 jasmine 在 javascript/coffeescript 中进行单元测试,非常好。

我一直在尝试使用 jasmine.Clock.Mock() 来提前并触发 setTimeout 回调。

唉,jasmine.Clock.tick(1001) 似乎没有任何效果!然后我发现了 sinon.js 有自己的时间模拟,用这个就可以了。我想了解原因。

这是一个待测试的虚拟 jquery 插件:

dummy_method = function(callback) {
fire_callback = function() {
callback();
}
setTimeout("fire_callback()", 1000);
}

这里是规范的两个版本:

# Working test (spy was called as expected), using sinon FakeTimers
describe "jQuery.fn.countdown", ->
beforeEach () ->
this.clock = sinon.useFakeTimers();
afterEach () ->
this.clock.restore()
it 'should fireup the callback', ->
countdown_callback = jasmine.createSpy('countdown_callback');

dummy_method(countdown_callback)
this.clock.tick(1001)
expect(countdown_callback).toHaveBeenCalled()



# Non-working test (spy is never called), using jasmine Clock Mock
describe "jQuery.fn.countdown", ->
beforeEach () ->
jasmine.Clock.useMock()
it 'should fireup the callback', ->
countdown_callback = jasmine.createSpy('countdown_callback');

dummy_method(countdown_callback)
jasmine.Clock.tick(1001)
expect(countdown_callback).toHaveBeenCalled()

最佳答案

Jasmine 只是尝试调用一个函数,其中 sinon 测试传递的参数是函数还是字符串。如果它是一个字符串,它调用 eval

Jasmine :

jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
if (jasmine.Clock.installed.setTimeout.apply) {
return jasmine.Clock.installed.setTimeout.apply(this, arguments);
} else {
return jasmine.Clock.installed.setTimeout(funcToCall, millis);
}
};

诗乃:

if (typeof timer.func == "function") {
timer.func.apply(null, timer.invokeArgs);
} else {
eval(timer.func);
}

所以这将通过 Jasmin 测试

setTimeout(fire_callback, 1000);

虽然这会失败

setTimeout("fire_callback()", 1000);

关于javascript - jasmine.Clock VS sinon.clock 我的 jasmin.Clock.useMock() 用法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110195/

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