【问题标题】:Ember deferred tasks prevent test-helper promises from resolvingEmber 延迟任务阻止测试助手承诺解决
【发布时间】:2013-11-06 21:43:06
【问题描述】:

我正在开发一个基于 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

然后我有一组不相关的测试,包括点击页面的各种元素(使用 Ember.Test 中的 click 帮助器),类似于以下内容:

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 调用未决),它正确执行点击,但承诺永远不会解决,实际的测试断言未经测试。

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

有没有办法解决这个问题?

【问题讨论】:

    标签: ember.js ember-data qunit rsvp.js ember-testing


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我基本上最终重构了我的代码,以在我的测试中禁用我的 update 调用,除了我专门测试该功能的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2019-03-11
    • 1970-01-01
    • 2015-03-29
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多