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 验收测试?

Ember 2,验收测试,websocket 挂起和 Then() 等待挂起完成

Ember 验收测试不适用于 AJAX

Ember 验收测试:检查按钮是不是已启用

选择选择的 Ember 验收测试

Ember 验收测试没有看到更新的 DOM