我正在为我的ember应用程序编写验收测试,并且其中一个组件接受用户输入并验证凭据,然后用户可以单击继续并继续。我面临的问题是,一旦在输入字段中填写了测试,然后单击下一个按钮,然后Helper不会引起足够的等待或暂停,因为验证完成后,我正在设置某些属性,因此该测试失败了。 / p>
除了andThen之外,有没有办法在编写验收测试时引起延迟。
答案 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';