Условно асинхронно выполнить тест Мокко - PullRequest
2 голосов
/ 05 апреля 2019

Как я могу условно выполнить тесты мокко, если условие является асинхронным вызовом функции?

Я попытался создать асинхронную реализацию на основе синхронного примера . В обоих приведенных ниже фрагментах я ожидал выполнения some test, поскольку обещание, возвращаемое asyncCondition(), разрешено до true.

Сначала я попытался await выполнить условие:

const assert = require('assert');

const asyncCondition = async () => Promise.resolve(true);

describe('conditional async test', async () => {
  const condition = await asyncCondition();

  (condition ? it : it.skip)('some test', () => {
    assert.ok(true);
  });    
});

Результат: No tests were found.

Далее я попробовал асинхронный before хук:

const assert = require('assert');

describe('conditional async test', async () => {
  let condition;

  before(async () => {
    condition = await asyncCondition();
  });

  (condition ? it : it.skip)('some test', () => {
    assert.ok(true);
  });
});

Результат: Pending test 'some test'.


Код работает, если строка const condition = await asyncCondition() изменена для выполнения синхронного вызова функции.

1 Ответ

1 голос
/ 06 апреля 2019

Цикл запуска Мокко запускает все describe обратные вызовы и собирает тесты синхронно , поэтому только синхронно доступные условия могут использоваться для переключения между it и it.skip во времяdescribe выполнение обратного вызова.

Как я могу условно выполнить тесты мокко, если условие является асинхронным вызовом функции?

Мокко обеспечивает .skip() to ...

... скажите Mocha просто игнорировать эти наборы и тестовые наборы.

.skip() может бытьиспользуется в before для пропуска всех тестов в наборе тестов:

const assert = require('assert');

const asyncCondition = async () => Promise.resolve(false);

describe('conditional async test', function () {

  before(async function () {
    const condition = await asyncCondition();
    if (!condition) {
      this.skip();  // <= skips entire describe
    }
  });

  it('some test', function () {
    assert.ok(true);
  });

});

... или может использоваться в одном тесте для пропуска только этого теста:

const assert = require('assert');

const asyncCondition = async () => Promise.resolve(false);

describe('conditional async test', function () {

  let condition;
  before(async function () {
    condition = await asyncCondition();
  });

  it('some test', function () {
    if (!condition) this.skip();  // <= skips just this test
    assert.ok(true);
  });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...