gpt4 book ai didi

ember.js - 编写 Ember.js 异步测试助手和涉及异步操作的测试

转载 作者:行者123 更新时间:2023-12-02 19:23:09 25 4
gpt4 key购买 nike

我试图弄清楚如何正确编写一个 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 中的方法的 promise 。返回。

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

  1. 我了解 Ember 测试助手工作原理背后的基本理论。 (链式 promise 等)
  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 数据与服务器的交互是否依赖于 Ember 运行循环?

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

最佳答案

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

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

希望这有帮助

关于ember.js - 编写 Ember.js 异步测试助手和涉及异步操作的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32593025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com