灰烬验收测试等待助手

时间:2018-08-08 18:36:52

标签: ember.js acceptance-testing

我正在为我的ember应用程序编写验收测试,并且其中一个组件接受用户输入并验证凭据,然后用户可以单击继续并继续。我面临的问题是,一旦在输入字段中填写了测试,然后单击下一个按钮,然后Helper不会引起足够的等待或暂停,因为验证完成后,我正在设置某些属性,因此该测试失败了。 / p>

除了andThen之外,有没有办法在编写验收测试时引起延迟。

2 个答案:

答案 0 :(得分:1)

根据Ember的版本,您可能正在使用(根据指南,v3.0之前的任何版本) ember-maybe-import-regenerator插件可能是最好的选择。该插件将允许您在应用代码和测试代码中使用async / await,这将为您提供所需的andThen替代选择。 Ember v3.0提供了支持async / await的测试助手。

以下是提供更多见解的GitHubGist:async/await in ember tests

答案 1 :(得分:0)

我找到了在特定时间段暂时暂停Ember Qunit测试的另一种方法。我在ember-cli 3.10.1和ember-cli-qunit 4.4.0(其中包括ember-test-helpers)中需要它。我已经在使用新的异步await click()语法。

我遇到的问题是await waitFor()不适用于我的测试,因为我的应用程序中的另一个插件响应了await click()事件,然后花费了未知的时间进行处理,然后重新呈现,删除内容而不是插入内容。我的代码中的下一个assert在重新渲染插件之前运行时将失败。我需要的是更接近简单的setTimeout()的东西,因为我没有DOM选择器,我可以传递给await waitFor(),因为DOM节点实际上正在消失而不是被渲染。这是我的解决方法:

setTimeout(() => {this.resumeTest()}, 1000); // wait for ember-changeset-validations to update, removing invalid input message
await pauseTest();

这使用带有箭头功能的setTimeout()来保持范围并等待1s,然后调用this.resumeTest()resumeTest()解析await pauseTest()行,在本节之后恢复测试代码。实际上,在余烬测试执行过程中,这两行相当于暂时停顿了1秒。

这对于我的DOM节点或其他内容被破坏的测试非常有效,这与await waitFor()可以处理的相反。

请确保在导入语句中包括pauseTest fn:

import { pauseTest } from '@ember/test-helpers';