Перейти к основному содержимому

Два способа сообщить об ошибке

Тест может сообщить о проблеме двумя способами, и разница в том, что происходит дальше:

Каждая проверка в node:assert/strict выбрасывает исключение, когда она не проходит. Исключение завершает тест, в котором оно возникло, поэтому проверки, написанные после него, уже не выполняются. Это и есть поведение быстрого отказа, и именно оно работает по умолчанию.

Чтобы сообщить о проблеме и продолжить проверки, поместите каждую проверку в отдельный вызов test(…). Тесты независимы: один упавший тест не останавливает следующий, поэтому за один запуск можно увидеть сразу несколько проблем.

Обе формы принимают сообщение. assert.equal(got, want, "…") и assert.ok(value, "…") печатают ваш текст вместо стандартного.


Отдельные тесты: сообщить и продолжить

Когда нужно проверить несколько случаев подряд, дайте каждому случаю свой тест. О сломанном случае будет сообщено, а случаи после него всё равно будут проверены.

Так один запуск показывает весь ущерб, а не только первый сломанный случай.

Увидеть все сломанные случаи сразу

Эта функция add игнорирует b, поэтому не проходят все три проверки. Так как каждая проверка — это отдельный тест, все три строки ✖ появляются за один запуск, а в итоге написано fail 3. Если бы это были три проверки внутри одного теста, сообщили бы только о первой.

Prompt
Напишите файл тестов на TypeScript, в котором в add есть ошибка (она возвращает только a, игнорируя b), а три проверки размещены в трёх отдельных тестах, чтобы сообщалось о каждом сломанном случае. Покажите настоящий вывод со всеми тремя ошибками за один запуск.
Вывод: программа на TypeScript и захваченный вывод

Неудачная проверка останавливает тест

Иногда неудачная проверка означает, что остальная часть теста работать не может. Типичный случай: тест сначала готовит значение, а затем изучает его. Если подготовка уже прошла неправильно, изучать значение бесполезно или это даже приведёт к сбою.

Здесь выбрасывающая исключение проверка — именно то, что нужно. Она завершает тест прямо на этом месте, и проверки ниже не выполняются — в этом и смысл.

Остановиться до бесполезных проверок

В splitWords есть ошибка (функция разделяет строку по неверному символу), поэтому возвращается 1 часть вместо 3. Проверка длины не проходит и выбрасывает исключение, поэтому до проверки первой части ниже дело не доходит — в отчёте видно только эту одну ошибку и ничего больше.

Prompt
Напишите файл тестов на TypeScript, в котором функция splitWords должна разделять строку, разделённую запятыми, но содержит ошибку (она разделяет по неверному символу). Тест сначала проверяет количество частей, а затем первую часть. Покажите вывод, в котором неудачная проверка останавливает тест до второй проверки.
Вывод: программа на TypeScript и захваченный вывод
Stop before the useless checks

Сообщения в логических проверках

assert.ok(value, message) — это проверка для обычного логического значения: она не проходит, когда значение ложно. Используйте её там, где нет пары got и want для сравнения, а есть только ответ «да или нет».

Сообщение — это второй аргумент, и оно необязательно. Без него исполнитель тестов всё равно напечатает свой текст и сравниваемые значения, поэтому собственное сообщение стоит писать тогда, когда оно говорит больше.

Простые сообщения

Две простые логические проверки, каждая в своём тесте и каждая с простым сообщением. Здесь обе проходят, поэтому сообщения молчат, а в итоге написано pass 2.

Prompt
Напишите файл тестов на TypeScript с функцией isEven и двумя тестами, которые проверяют, что isEven(4) равно true, а isEven(3) равно false, используя assert.ok с простым сообщением. Покажите вывод с успешным прохождением.
Вывод: программа на TypeScript и захваченный вывод
Plain messages