【问题标题】:Writing Ember.js async test helpers and tests involving async operations编写 Ember.js 异步测试助手和涉及异步操作的测试
【发布时间】:2015-09-15 18:22:41
【问题描述】:

我试图弄清楚如何正确编写一个 Ember 测试助手,它执行自己的异步操作和测试,这些测试本身涉及异步操作,不一定包含在异步助手中。 Ember 站点 herehere 上的示例都显示了异步测试助手,它们仅通过调用预先存在的异步助手来构建,而不是创建自己的异步条件的代码。

背景:我正在开发一项服务,该服务将有一个由 Ember+Ember Data 前端的 REST 后端。我想编写一些与实际服务器对话的测试代码,以便我们了解 Ember-Data 如何与服务器交互的详细信息。 (在您跳来跳去讨论集成测试应该如何使用假数据以便它们可以在 CI 模式下运行之前,我们所做的是设置一个独立 Ember 应用程序,其生活的唯一目的是通过 Ember Data 运行数据模型以调试 服务器。因此,这些实际上是 服务器 测试,旨在确保服务器和 Ember Data 之间的兼容性,不是对 Ember 应用程序本身的集成测试。)

因此,一些测试想要做的是:

  1. 对服务器执行 AJAX 查询以触发它设置某个数据集。 (本质上,调用服务器内部的一些特殊测试代码来创建适当的先决条件。)
  2. 使用 Ember 数据 API 以与“真正的”Ember 应用程序相同的方式从服务器检索数据(或向其写入数据)。
  3. 确保我们得到预期的结果,或者服务器中的数据在之后看起来正确。

前两个操作显然都是异步的。第一个显然是一个很好的异步助手。第二个不一定必须是帮助程序,因为每次调用都会有所不同,但显然测试本身需要等待来自DS.store 的方法返回的承诺。

最后,我知道的其他内容:

  1. 我了解 Ember 测试助手如何工作的基本理论。 (链式承诺等)
  2. 内置的异步助手(例如clickvisit)都以return app.testHelpers.wait();结束
  3. wait 返回一个 RSVP.Promise 的实例,它会进行大量处理以确保在解决之前或多或少地清理干净,包括处理未完成的 AJAX 查询、测试服务员等。
  4. 如果需要,wait 可以与测试服务员互动。

因此,如果我的异步助手与 Ember 的(即return app.testHelpers.wait();)做同样的事情,这对我的 AJAX 助手来说就足够了,因为wait 将负责等待 AJAX 事务完成。然而,这并不需要回答更广泛的问题。

好的,现在是真正的问题:

  1. 如果我想编写自己的任意异步帮助程序,我是否足以返回将在适当时间解决的RSVP.Promise 实例?或者是否有必要实际使用wait() 机制(可能还有测试服务员),因为Ember 对wait 机制的行为有一些额外的依赖?

  2. Ember 是否对涉及异步操作的测试有任何特殊要求?还是QUnit mechanisms for async tests 足够了?

  3. Ember 是否有任何类型的用于 QUnit 异步内容的“包装器”? (它“隐藏”其测试调用集背后的 QUnit 特性的方式。)

  4. Ember Data 与服务器的交互是否依赖于 Ember 运行循环?

好的,我认为这对于一个问题来说已经足够了。 :) 我非常感谢愿意教育我的人。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    尝试以我对这些问题的经验回答您的问题,这些问题可能不完整:

    1. 您可以简单地注册一个返回 RSVP.Promise 实例的异步测试助手。然后,andThen 块将等待您的承诺解决,然后再运行,就像使用内置异步帮助程序(如访问)一样。
    2. Ember 没有关于异步操作的具体要求,您应该使用 Qunit 机制。编写异步测试时的一些小技巧,“自动”运行循环在测试模式下被禁用,因此您必须将操作对象或设置属性的语句包装在 Ember.run 语句中
    3. AFAIK 除了模块(moduleForComponent 等)外,没有任何 Ember 包装器
    4. Ember 数据交互需要嵌套在 Ember.run 语句中,因为它们正在操作对象和存储,并且这些需要安排在 Ember 运行循环中运行。当您运行您的应用时,Ember 会自动为您安排一系列调用,但在测试模式下会被禁用

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2014-02-27
      相关资源
      最近更新 更多