Есть ли способ запустить тестовый пример приёмки ember в медленном режиме?

Я написал несколько тестовых примеров для приемки ember. Дело в том, что когда я посещаю URL http://localhost:4200/tests и фильтрую модуль Acceptance, тестовые примеры выполняются молниеносно. Хотя они были написаны в async await функции.

Я хочу установить временную задержку для каждой строки, используя цикл запуска ember run.later или run.next. Но это не выход.

Есть ли способ добавить slow mode где-нибудь в верхней части приложения (или) Есть ли уже существующие помощники по тестированию? Итак, я могу видеть, как работают тестовые примеры.


person rinold simon    schedule 02.06.2019    source источник
comment
Почему бы просто не использовать точки останова?   -  person Lux    schedule 02.06.2019
comment
Снова точки останова должны быть добавлены везде, где это необходимо, и должны нажимать кнопку «Выполнить» каждый раз, когда мы достигаем точки останова.   -  person rinold simon    schedule 02.06.2019
comment
Вы можете использовать помощники по приостановке   -  person Patsy Issa    schedule 04.06.2019
comment
@PatsyIssa Это то же самое, что и отладчик?   -  person rinold simon    schedule 05.06.2019
comment
Если вы используете Mirage, вам может помочь server.timing.   -  person Gaurav    schedule 05.06.2019


Ответы (1)


Для тестирования 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