Для тестирования 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');
});
});
Я также рекомендую использовать отладчик вашего браузера, чтобы выполнять код в удобном для вас темпе. Это действительно мощно и, вероятно, в большинстве случаев поможет вам больше, чем замедлит тесты. 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');
});
});
person
handlebears
schedule
28.07.2019