【问题标题】:Ember -- component integration async tests aren't waiting until async calls are returnedEmber——组件集成异步测试不会等到异步调用返回
【发布时间】:2017-05-09 17:59:00
【问题描述】:

我很难在组件集成测试中测试异步功能。 Input 启动对端点的异步调用,当它返回时,我发送一个动作。我正在尝试测试该操作是否发送了正确的数据。

我尝试将我的断言放在 wait() 帮助器中,但断言在调用(取决于异步)操作之前被命中。

这是一个显示该问题的旋转:https://ember-twiddle.com/79f9a80c639b642e538803ac64a1cf9d?openFiles=tests.integration.components.test-comp-test.js%2Ctemplates.components.test-comp.hbs

如何正确编码我的异步组件集成测试?

【问题讨论】:

  • 你真的在你的组件中这样调用setTimeout吗?
  • 不,这只是真正的 ajax 调用的替代品。

标签: testing ember.js ember-testing


【解决方案1】:

有两件事未能通过您的测试:

  1. 首先,永远不要使用setTimeout (window.setTimeout) 来安排Ember 的一些未来工作。使用 Ember 的方式来做这件事;我的意思是Ember.run.later。对于在验收测试中发生在我身上的同样的事情;请查看以下question 并查看 cmets 的答案。原因是; Ember 的测试助手确实无法像我们预期的那样处理setTimeout
  2. 测试本身有问题;在您在 test 中编写的操作处理程序中,您需要更改 name 属性而不是返回承诺。

无论如何请看下面twiddle我已经更新了。总体而言,使用 Ember 进行测试有点痛苦。因为我相信没有适当的综合文档。祝你好运!

【讨论】:

  • 感谢更新的 twiddle,它与 ember.run.later 一起使用真是太好了。在这种情况下,我的 setTimeout 只是 ajax 调用的占位符。如果我在那里进行 ajax 调用而不是 settimeout,我需要更改什么?
  • 我想它适用于Ember.$.ajax。请参阅以下twiddlesimple-ajax-route 验收测试。虽然这是一个验收测试;希望集成测试不会有任何改变:)
猜你喜欢
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2020-01-02
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多