ember 验收测试等待助手
Posted
技术标签:
【中文标题】ember 验收测试等待助手【英文标题】:ember acceptance tests wait helpers 【发布时间】:2018-08-08 18:36:52 【问题描述】:我正在为我的 ember 应用程序编写验收测试,其中一个组件接受用户输入并验证凭据,之后用户可以单击继续并继续。我面临的问题是,一旦测试填写了输入字段,然后它会单击下一个按钮,然后帮助程序没有引起足够的等待或暂停,因为测试失败,因为我在验证完成后设置了一些属性。
在编写验收测试时,除了 andThen 之外,有没有办法导致延迟。
【问题讨论】:
在较新的 ember 版本中,语法发生了变化:guides.emberjs.com/release/testing/acceptance 你可以试试新的await fillIn('.my-input')
和await click('.my-button')
吗?有时await settled()
测试助手很高兴等待超时和动画...
它对我不起作用,它不知道等待助手。是否需要任何特定的导入?
【参考方案1】:
根据您可能使用的 Ember 版本(根据指南,任何版本低于 v3.0)ember-maybe-import-regenerator 插件可能是最佳选择。此插件将允许您在应用程序代码和测试代码中使用async / await
,它应该为您提供您需要的andThen
的替代方案。 Ember v3.0 提供了支持async / await
的测试助手。
这里有一个 GitHubGist,可以提供进一步的见解:async/await in ember tests
【讨论】:
【参考方案2】:我找到了另一种在特定时间范围内暂时暂停 Ember Qunit 测试的方法。我在ember-cli
3.10.1 和ember-cli-qunit
4.4.0 中需要这个,其中包括ember-test-helpers
。我已经在使用新的 async await click()
语法了。
我遇到的问题是 await waitFor()
不适用于我的测试,因为我的应用程序中的另一个插件响应了 await click()
事件,然后花费了未知的时间来处理,然后重新渲染,改为删除内容插入它。我的代码中的下一个assert
在插件重新渲染之前运行时会失败。我需要的是更接近简单的setTimeout()
,因为我没有可以传递给await waitFor()
的DOM 选择器,因为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()
行,在本节之后恢复测试代码。实际上,这两行相当于 ember 测试执行中的 1 秒临时暂停。
这对于我的 DOM 节点或其他内容被破坏的测试非常有效,这与 await waitFor()
可以处理的相反。
确保在导入语句中包含pauseTest
fn:
import pauseTest from '@ember/test-helpers';
【讨论】:
以上是关于ember 验收测试等待助手的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法用假计时器运行 Ember.Testing 验收测试?