我正在试图弄清楚如何正确编写一个执行自己的异步操作的Ember测试助手和本身涉及异步操作的测试,这些异步操作不一定包装在异步助手中。Ember站点上的示例在这里和这里都显示了仅通过调用预先存在的异步助手来构建的异步测试助手,而不是创建自己的异步条件的代码。
背景:我正在开发一个服务,该服务将有一个由Ember Ember数据前端的REST后端。我想编写一些与实际服务器对话的测试代码,以便我们能够确定Ember数据如何与服务器交互的细节。(在你跳上跳下讨论集成测试应该如何使用假数据以便它们可以在CI模式下运行之前,我们所做的是设置一个单独的Ember应用程序,其唯一的目的是通过Ember数据来调试服务器。因此,这些实际上是服务器测试,旨在确保服务器和Ember Data之间的兼容性,而不是对Ember应用程序本身的集成测试。)
因此,一些测试想要做的是:
前两个操作显然都是异步的。第一个显然是一个很好的异步助手。第二个不一定是助手,因为每个调用都会不同,但显然测试本身需要等待DS.store
返回的方法的promise。
最后,我知道的其他东西:
点击
、访问
)都以返回app. testHelpers.awa()结束;
等待
返回一个RSVP. Promise
的实例,它会进行大量处理,以确保在解析之前或多或少地清理了东西,包括处理未完成的AJAX查询、测试服务员等。等待
可以与测试服务员交互。因此,似乎如果我的异步助手做了与Ember相同的事情(即返回app. testHelpers.awa();
),这对我的AJAX助手来说就足够了,因为等待
将负责等待AJAX事务完成。然而,这并不需要回答更广泛的问题。
好的,现在真正的问题是:
>
如果我想编写我自己的任意异步助手,我返回一个RSVP. Promise
的实例就足够了吗?或者有必要实际使用wait()
机制(可能还有测试waiters),因为wait
机制的行为有一些额外的Ember依赖?
Ember对中途涉及异步操作的测试有什么特殊要求吗?或者异步测试的QUnit机制是否足够?
Ember是否有任何类型的QUnit异步东西的“包装”?(它在其一组测试调用背后“隐藏”QUnit的方式。)
Ember Data与服务器的交互是否依赖于Ember运行循环?
好的,我认为这对于一个问题来说已经足够了。:)我非常感谢任何愿意教育我的人。
试图用我在这些问题上的经验来回答你的问题,这些经验可能是不完整的:
希望这有帮助