有没有办法运行Ember.Testing接受测试与假定时器?

时间:2014-08-15 20:14:00

标签: javascript ember.js sinon acceptance-testing

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

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

我尝试将sinonjs与假冒者一起使用,但这似乎搞乱了ember运行循环以及与应用程序或测试相关的setInterval / setTimeout的任何其他用法。

我正在寻找一种将测试与此类功能集成的方法。我会考虑的选项是:

  • 将补丁变成Ember / Ember.Testing或Sinon
  • 使用另一种假冒方法(除了sinon)
  • 手动伪造到Date对象以处理某种非侵入式假计时器

现在,我想有人必须已经面对这个问题,所以在我得出任何结论之前我需要问一下:这种情况是否有建议的方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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