gpt4 book ai didi

ember.js - 如何将 sinon.useFakeTimers 与 Ember 测试(验收)一起使用?

转载 作者:行者123 更新时间:2023-12-03 21:41:21 25 4
gpt4 key购买 nike

在 sinon 时钟的帮助下,我已经成功地在 ember 中编写了单元级测试,但验收测试似乎总是一个问题。

例如,在我的 route ,我打算在做某事之前等待 5 秒

export default Ember.Route.extend({
model: function() {
setTimeout(Ember.run.bind(this, function() {
//after the timeout do something like transition to another route
}), 5000);
}
});

在 ember 测试中,我会做一个简单的访问,断言 currentURL() 是好的,然后做一个 clock.tick(5001) w/sinon ... 然后断言计时器已经完成并且设置了一些状态/等等.

我意识到 sinon 和 ember run loop 似乎不能一起玩得很好,但我很好奇其他人正在使用什么来在高级别测试这样的计时器(非单元测试/没有 selenium 或 sleep hacks)。

如果需要稍后运行,您将如何修改下面的(不正确的)测试以使用 clock.tick?

test("sinon and ember play nice", function(assert) {
var clock = sinon.useFakeTimers();
visit("/");
andThen(function() {
assert.equal(currentURL(), "/");
});
clock.tick(5001);
andThen(function() {
assert.equal(currentURL(), "/the-transition-url");
});
});

最佳答案

我认为在所有情况下 sinon.useFakeTimers() 都会破坏异步和同步助手(在本例中是 andThen())。

我在类似情况下测试过类似的东西:

test("sinon and ember play nice", function(assert) {
const clock = sinon.useFakeTimers();
visit('/');
clock.tick(0); // this for simulating rendering right now
assert.equal(currentURL(), '/');
clock.tick(5100);
assert.equal(currentURL(), '/the-transition-url');
clock.restore();
});

p.s.:在对异步助手进行了大量测试之后,看起来 ember-testing 框架上的异步实现是基于通过的时间。作为副作用,在 clock.tick(0);clock.tick(50); 之前,不会执行任何 andThen()

p.s.2:看起来还有一个与 stackoverflow 相关的问题 Is there a way to run Ember.Testing acceptance tests with fake timers?以及最新的 ember(2.9 和 2.10)以及 qunit 的升级,当前代码需要更多调整

关于ember.js - 如何将 sinon.useFakeTimers 与 Ember 测试(验收)一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29593849/

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