有什么办法可以运行 ember 慢速模式验收测试用例吗?
Is there any way to run ember acceptance test case in slow mode?
我写了一些 ember 验收测试用例。问题是当我通过 Acceptance 访问 URL http://localhost:4200/tests
和过滤器模块时,测试用例是 运行ning 快如闪电。尽管这些是在 async
await
函数中编写的。
我想使用 ember 运行 循环 run.later
或 run.next
为每行设置一个时间延迟。但这不是解决方案。
有没有办法在应用程序顶部的某处添加 slow mode
(或者)是否有任何已经存在的测试助手?所以我可以看到测试用例 运行ning 正在运行。
Ember 测试没有 "slow mode",但您可以使用常规 JavaScript 方法自行降低测试速度。例如,下面我们创建了一个 wait
方法,您可以在测试的每个步骤之间调用它。
此问题已在 episode of May I Ask a Question 上发表!您可以观看录像,了解如何使用下面的代码以及如何使用调试器和 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');
});
});
我还建议使用浏览器的调试器按照您自己的步调逐步执行代码。它真的很强大,在大多数情况下,它可能对您的帮助不仅仅是减慢测试速度。 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');
});
});
我写了一些 ember 验收测试用例。问题是当我通过 Acceptance 访问 URL http://localhost:4200/tests
和过滤器模块时,测试用例是 运行ning 快如闪电。尽管这些是在 async
await
函数中编写的。
我想使用 ember 运行 循环 run.later
或 run.next
为每行设置一个时间延迟。但这不是解决方案。
有没有办法在应用程序顶部的某处添加 slow mode
(或者)是否有任何已经存在的测试助手?所以我可以看到测试用例 运行ning 正在运行。
Ember 测试没有 "slow mode",但您可以使用常规 JavaScript 方法自行降低测试速度。例如,下面我们创建了一个 wait
方法,您可以在测试的每个步骤之间调用它。
此问题已在 episode of May I Ask a Question 上发表!您可以观看录像,了解如何使用下面的代码以及如何使用调试器和 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');
});
});
我还建议使用浏览器的调试器按照您自己的步调逐步执行代码。它真的很强大,在大多数情况下,它可能对您的帮助不仅仅是减慢测试速度。 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');
});
});