【发布时间】:2015-09-15 18:22:41
【问题描述】:
我试图弄清楚如何正确编写一个 Ember 测试助手,它执行自己的异步操作和测试,这些测试本身涉及异步操作,不一定包含在异步助手中。 Ember 站点 here 和 here 上的示例都显示了异步测试助手,它们仅通过调用预先存在的异步助手来构建,而不是创建自己的异步条件的代码。
背景:我正在开发一项服务,该服务将有一个由 Ember+Ember Data 前端的 REST 后端。我想编写一些与实际服务器对话的测试代码,以便我们了解 Ember-Data 如何与服务器交互的详细信息。 (在您跳来跳去讨论集成测试应该如何使用假数据以便它们可以在 CI 模式下运行之前,我们所做的是设置一个独立 Ember 应用程序,其生活的唯一目的是通过 Ember Data 运行数据模型以调试 服务器。因此,这些实际上是 服务器 测试,旨在确保服务器和 Ember Data 之间的兼容性,不是对 Ember 应用程序本身的集成测试。)
因此,一些测试想要做的是:
- 对服务器执行 AJAX 查询以触发它设置某个数据集。 (本质上,调用服务器内部的一些特殊测试代码来创建适当的先决条件。)
- 使用 Ember 数据 API 以与“真正的”Ember 应用程序相同的方式从服务器检索数据(或向其写入数据)。
- 确保我们得到预期的结果,或者服务器中的数据在之后看起来正确。
前两个操作显然都是异步的。第一个显然是一个很好的异步助手。第二个不一定必须是帮助程序,因为每次调用都会有所不同,但显然测试本身需要等待来自DS.store 的方法返回的承诺。
最后,我知道的其他内容:
- 我了解 Ember 测试助手如何工作的基本理论。 (链式承诺等)
- 内置的异步助手(例如
click、visit)都以return app.testHelpers.wait();结束 -
wait返回一个RSVP.Promise的实例,它会进行大量处理以确保在解决之前或多或少地清理干净,包括处理未完成的 AJAX 查询、测试服务员等。 -
如果需要,
wait可以与测试服务员互动。
因此,如果我的异步助手与 Ember 的(即return app.testHelpers.wait();)做同样的事情,这对我的 AJAX 助手来说就足够了,因为wait 将负责等待 AJAX 事务完成。然而,这并不需要回答更广泛的问题。
好的,现在是真正的问题:
如果我想编写自己的任意异步帮助程序,我是否足以返回将在适当时间解决的
RSVP.Promise实例?或者是否有必要实际使用wait()机制(可能还有测试服务员),因为Ember 对wait机制的行为有一些额外的依赖?Ember 是否对涉及异步操作的测试有任何特殊要求?还是QUnit mechanisms for async tests 足够了?
Ember 是否有任何类型的用于 QUnit 异步内容的“包装器”? (它“隐藏”其测试调用集背后的 QUnit 特性的方式。)
Ember Data 与服务器的交互是否依赖于 Ember 运行循环?
好的,我认为这对于一个问题来说已经足够了。 :) 我非常感谢愿意教育我的人。
【问题讨论】:
标签: ember.js ember-data