在测试ember应用程序时,去抖动函数调用的错误

时间:2014-02-12 22:02:28

标签: unit-testing ember.js qunit

我正在使用QUnit测试一个相对较大的Ember应用程序(http://wheelmap.org/map)并且遇到去抖动调用问题,例如更改网址以在应用内部拥有地图视图的固定链接或在测试时执行手动AJAX请求。

我按照http://emberjs.com/guides/testing/integration/

上的文档进行操作

现在,当我通过在模块设置中调用App.reset()来重置应用程序状态时,它会将所有绑定等重置为变量和从属控制器。

module('Map', {
  setup: function() {
    App.reset();
  }
});

这似乎对于拥有干净的工作环境很有好处,但是导致Ember.setEmber.get可以访问变量的错误,例如this.get('controllers.toolbar')

Cannot call method 'set' of null

所以第一次测试总是运行得很好,但是由于第一次测试的去抖函数调用,进一步的测试会中断。所以我认为我必须做的是以某种方式停止这种去抖动的呼叫。

其他选项是检查是否在此函数调用中设置了所有需要的变量。但是,在为测试添加条件时,这似乎很麻烦。

您怎么看?

提前谢谢!

2 个答案:

答案 0 :(得分:3)

我通过搜索RunLoop源文件找到了答案:

Ember.run.cancelTimers()

这不是文档的一部分。可能是文档不良或者不属于公共API的问题。

现在我只是在模块测试拆解功能中调用它:

module('Map', {
  setup: function() {
    // ...
  },
  teardown: function() {
    Ember.run.cancelTimers()
  }
});

答案 1 :(得分:1)

我们遇到了类似的问题,并决定在测试期间禁用去抖。

您可以使用if(Ember.testing){...}检查是否处于测试模式。