有办法运行烬吗.用假计时器测试验收测试

Is there a way to run Ember.Testing acceptance tests with fake timers?

本文关键字:计时器 测试 验收测试 运行      更新时间:2023-09-26

我正在EmberJS中的一个项目上工作,该项目有一组验收测试(qUnit with EmberJS helper)。现在,我正试图尽可能地优化这些测试,因为每次运行等待10分钟并不好。

我们的一些测试实际上需要等待一些事情发生:计时器用完,时钟更新需要一分钟,等等。

我尝试使用sinonjs与faketimers,但这似乎搞砸了余烬运行循环和任何其他使用setInterval/setTimeout与应用程序或测试。

我正在寻找一种方法来集成测试与这样的功能。我会考虑以下选项:

  • 为烬/烬制作补丁。测试
  • 使用另一种假定时器方法(除了sinon)
  • 手动导入Date对象,以处理某种非侵入式假计时器
现在,我想一定有人已经面对过这个问题了,所以在我得出任何结论之前,我需要问一下:对于这种情况有什么推荐的方法吗?

谢谢!

我们对这个问题的特殊解决方案是将常量值从控制器/路由中取出,并将其放入应用的命名空间中,然后在测试时更改它。

App = Em.Application.create({
  someTimerLength:2000
});
// if testing mode, change a ton of things 
// you could also use a different config hash when creating the app
if(Ember.testing){
  Em.set(App,'someTimerLength', 1);  
}

引用应用命名空间的随机代码

  Ember.run.later(function(){
    resolve(['red', 'yellow', 'blue']);
  }, App.someTimerLength);

下面是一个丑陋的例子,但展示了我们是如何做到的:http://emberjs.jsbin.com/wipo/41/edit