0

我正在开发一个基于 Ember 的应用程序,使用 QUnit 和 Teaspoon 进行前端集成测试。我目前正在尝试实现一个新功能,该功能涉及使用递归调用的常规服务器查询Ember.run.later。以更简化的形式,用 CoffeeScript 编写,这段代码是:

App.Widget = DS.Model.extend
  ...
  update: ->
    widget = @
    options = {...}
    @store.findQuery('widget_children', options).then (data) ->
      (do stuff with data)
      Ember.run.later widget, widget.update, 10000

然后,我进行了一组不相关的测试,这些测试涉及单击页面的各种元素(使用 中的click帮助器Ember.Test),类似于以下内容:

asyncTest 'Gadget modal displays on link click', 1, ->
  Ember.run ->
    click($('.gadget a')).then ->
      start()
      equal $('#gadget-modal').length, 1, "Gadget modal not present"

我现在看到的是,当 Teaspoon 进行点击测试(later由于应用程序设置而导致呼叫挂起)时,它会正确执行点击,但承诺永远不会解决,实际的测试断言也没有经过测试。

我假设承诺没有解决,因为延迟later调用被认为是click助手等待完成的异步行为,除了当它完成时它只是设置另一个later调用 - 所以它永远不会被解决。

有没有解决的办法?

4

1 回答 1

1

Ember 测试将在计时器仍然存在时停止并等待,然后在某些异步函数上继续以测试模式运行。

您是否一直在将事物推入运行循环?如果是这样,这可能会阻止测试继续进行。

在测试模式下运行时,您可能需要禁用某些功能。

于 2013-11-07T06:15:53.297 回答