rin*_*mon 1 ember.js ember-data ember-testing ember-cli ember-qunit
我写了一些 ember 验收测试用例。问题是当我http://localhost:4200/tests
通过 Acceptance访问 URL和过滤器模块时,测试用例运行速度快如闪电。即使这些是在async
await
函数中编写的。
我想使用 ember 运行循环run.later
或run.next
. 但这不是解决方案。
有没有办法slow mode
在应用程序顶部的某个地方添加(或)是否有任何已经存在的测试助手?所以我可以看到运行中的测试用例。
Ember 测试没有“慢速模式”,但您可以使用常规的 JavaScript 方法来降低自己的测试速度。例如,下面我们创建了一个wait
方法,您可以在测试的每个步骤之间调用该方法。
这个问题出现在我可以问一个问题的一集中!您可以观看录音以了解如何使用下面的代码以及如何使用调试器和pauseTest
.
此代码将等待一秒钟,然后移至下一行,您放置的任何位置await wait()
:
import { module, test } from 'qunit';
import { visit, currentURL } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { click, find } from '@ember/test-helpers';
function wait(timeout = 1000) {
return new Promise((resolve) => {
setTimeout(resolve, timeout);
});
}
module('Acceptance | slowdown', function(hooks) {
setupApplicationTest(hooks);
test('clicking the button reveals text', async function(assert) {
await visit('/');
await wait();
await click('.test-button-1');
await wait();
assert.equal(find('.some-message').innerText, 'first message');
await click('.test-button-2');
await wait();
assert.equal(find('.some-message').innerText, 'second message');
});
});
Run Code Online (Sandbox Code Playgroud)
我还建议您使用浏览器的调试器按照自己的节奏逐步调试代码。它真的很强大,在大多数情况下,它可能不仅会减慢测试速度,还能帮助您更多。this.pauseTest()
也很有帮助。
也可以将 JavaScript 生成器用于一些不太杂乱的代码,但如果使用它,您的测试将无法正常退出,因此这是一种临时方法:
import { module, test } from 'qunit';
import { visit, currentURL } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { click, find } from '@ember/test-helpers';
function slowTest(message, generatorFunction) {
test(message, async function(assert) {
let generator = generatorFunction(assert);
window.step = window.next = async () => {
generator.next();
await this.pauseTest();
}
window.finish = () => {
generator.return();
this.resumeTest();
}
await this.pauseTest();
});
}
module('Acceptance | slowdown', function(hooks) {
setupApplicationTest(hooks);
slowTest('clicking the button reveals text', function*(assert) {
yield visit('/');
yield click('.test-button-1');
assert.equal(find('.some-message').innerText, 'first message');
yield click('.test-button-2');
assert.equal(find('.some-message').innerText, 'second message');
});
});
Run Code Online (Sandbox Code Playgroud)