有没有办法用假计时器运行 Ember.Testing 验收测试?

Posted

技术标签:

【中文标题】有没有办法用假计时器运行 Ember.Testing 验收测试?【英文标题】:Is there a way to run Ember.Testing acceptance tests with fake timers? 【发布时间】:2014-08-15 20:13:59 【问题描述】:

我正在使用 EmberJS 开发一个项目,该项目具有一组验收测试(带有 EmberJS 助手的 qUnit)。现在,我正在尝试尽可能优化这些测试,因为每次运行等待 10 分钟并不好。

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

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

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

为 Ember / Ember.Testing 或 Sinon 制作补丁 使用另一种 faketimer 方法(除了 sinon) 手动伪装成 Date 对象以处理某种非侵入式假计时器

现在,我想肯定有人已经面对这个问题了,所以在我得出任何结论之前,我需要问一下:对于这种情况有推荐的方法吗?

谢谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于有没有办法用假计时器运行 Ember.Testing 验收测试?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在单个变量(批处理文件)中分配多个值?如果没有,有没有办法以更有效的方式运行它?

使计时器在后台 iOS 上运行 3 分钟以上

手机锁屏js倒计时停止问题解决办法探索

有没有办法在倒数计时器中使用 UIButton 文本?

用假数据模拟API接口

有没有办法强制 Win32 计时器在不空闲时执行?