如何将 sinon.useFakeTimers 与 ember 一起使用 - 测试(验收)?
How to use sinon.useFakeTimers with ember-testing (acceptance)?
在 sinon 时钟的帮助下,我在 ember 中成功编写了单元级测试,但验收测试似乎总是一个问题。
例如,在我的路线中,我打算在做某事之前等待 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 ... 然后断言计时器是完成,某些状态为 set/etc。
我意识到 sinon 和 ember 运行 循环似乎不能一起玩,但我很好奇其他人用什么来测试这样的高级定时器(非单元测试/没有硒或睡眠黑客)。
如果稍后需要 运行,您将如何修改下面的(不正确的)测试以使用 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:看起来还有另一个关于 Whosebug 的问题 Is there a way to run Ember.Testing acceptance tests with fake timers? 以及最新的 ember(2.9 和 2.10),以及 qunit 的升级,当前代码需要更多调整
在 sinon 时钟的帮助下,我在 ember 中成功编写了单元级测试,但验收测试似乎总是一个问题。
例如,在我的路线中,我打算在做某事之前等待 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 ... 然后断言计时器是完成,某些状态为 set/etc。
我意识到 sinon 和 ember 运行 循环似乎不能一起玩,但我很好奇其他人用什么来测试这样的高级定时器(非单元测试/没有硒或睡眠黑客)。
如果稍后需要 运行,您将如何修改下面的(不正确的)测试以使用 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:看起来还有另一个关于 Whosebug 的问题 Is there a way to run Ember.Testing acceptance tests with fake timers? 以及最新的 ember(2.9 和 2.10),以及 qunit 的升级,当前代码需要更多调整