我写了一些余烬测试案例。事情是当我访问URL ...
<persistence-unit-defaults>
<delimited-identifiers />
</persistence-unit-defaults>
...
并通过Acceptance筛选模块时,测试用例运行得非常快。即使这些都是用http://localhost:4200/tests
async
函数编写的。
我想使用余烬运行循环await
或run.later
为每行设置时间延迟。但这不是解决方案。
是否可以在应用程序顶部的某个位置添加run.next
(或)是否已经存在测试助手?这样我就可以看到正在运行的测试用例。
答案 0 :(得分:2)
Ember测试没有“慢速模式”,但是您可以使用常规的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');
});
});