Как назвать assert на несколько раз, пока это не правда?

Скажите, что я получил некоторый базовый результат, как показано ниже:

expect(myObject.getValue()).to.equal(5);

И возвращаемое значение из myObject.getValue() должно быть 5 после того, как несколько кодов работают в каком-то другом месте, так что мне просто нужно позволить value быть обновленным.

У меня вопрос, каков код для создания такого теста?

2 ответа

Решение

Мокко имеет возможность для повторных испытаний. Вы можете просто использовать this.retries(number_of_tries) в вашем тесте. Как это:

it("something", function () {
    this.retries(10);
    expect(myObject.getValue()).to.equal(5);
});

Вы также можете использовать его в describe блокировать, если вы хотите установить количество повторных попыток для всего набора тестов. Обратите внимание, что если вы используете this.retries, он не может появиться в функции стрелки (() => ...) потому что функции стрелок позволяют this оставьте значение, которое оно имело в области, в которой появилась функция стрелки. Вы должны использовать полную функцию (function () ...).

Для большей точности повторяемой попытки используйте библиотеку retry-assert:

const activeUser = await retry()
    .fn(() => getUser(id))
    .until(user => expect(user).toHaveProperty('active', true))

Повторная попытка всего теста является слишком грубой при написании функциональных тестов более высокого уровня - например, при тестировании API-интерфейсов, имеющих асинхронные изменения состояния - и не подходит для CucumberJS. Retry Assert работает с любым исполнителем теста и будет выдавать значимые сообщения об ошибках, если ваше повторное утверждение не будет выполнено слишком много раз.

Отказ от ответственности: я автор повторных заявлений.

Другие вопросы по тегам