ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Проверка ожидаемой ошибки в Jasmine: как использовать toThrow

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для быстрой проверки срабатывания ошибки в Jasmine воспользуйтесь методом toThrowError(), соединённым с expect. В качестве аргумента передавайте стрелочную функцию, обернутую вокруг функции, которую вы тестируете:

JS
Скопировать код
expect(() => myFunctionThatShouldThrow()).toThrowError();

Таким образом, вы удостоверитесь в том, что функция myFunctionThatShouldThrow действительно генерирует исключение. Можно передать в .toThrowError() определённый класс ошибки или текст сообщения для тестирования конкретной ситуации.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Сути глубже: Тестирование конкретных исключений

В более сложных тестах вы можете использовать следующие подходы для проверки ошибок:

1. Проверка конкретных сообщений об ошибках

Чтобы протестировать конкретные сообщения об ошибках, используйте такую конструкцию:

JS
Скопировать код
expect(() => myFunction()).toThrowError("Конкретное сообщение об ошибке");

2. Ожидание конкретного класса ошибок

Если вам важен класс исключения, например, TypeError или RangeError, используйте toThrowErrorOfType:

JS
Скопировать код
expect(() => myFunction()).toThrowErrorOfType('TypeError');

3. Продвинутое тестирование ошибок при помощи Jasmine Matchers

Когда тестам требуется дополнительная гибкость, Jasmine-Matchers могут предложить расширенные возможности:

JS
Скопировать код
expect(() => myFunction()).toThrowAnyError();

4. Индивидуализация ожиданий при помощи пользовательских matchers

Jasmine позволяет создавать пользовательские matchers для учета индивидуальных условий тестирования.

Управление контекстом: Помощник bind в ES5

Когда в функцию необходимо передать конкретный контекст или аргументы, bind обретает огромную полезность:

JS
Скопировать код
expect(myFunction.bind(context, arg1, arg2)).toThrowError();

Тонкие нюансы на пути к усовершенствованию

1. Стабильные тесты: Проверяем классы исключений вместо сообщений

Важно проверять класс исключения, а не фокусироваться на тексте сообщений об ошибках. Это позволяет избежать влияния возможных изменений текста сообщений на стабильность тестов.

2. Особенности синтаксиса: ES5 против ES6

Разбираться в синтаксических нюансах тестируемых функций крайне важно, так как для ES5 и ES6 они могут отличаться.

Визуализация

Пример кода в качестве иллюстрации "сюрприза в коробке":

JS
Скопировать код
describe("тест на срабатывание ошибки", function() {
  it("ожидает, что будет выброшена 'Ошибка'", function() {
    expect(function() {
      throw new Error("Сюрприз!");
    }).toThrowError("Сюрприз!");
  });
});
Markdown
Скопировать код
📦 До: Закрытая коробка (без ошибки)
🤡 После: Кукла выскочила! (Ошибка сработала, как и ожидалось)

Тут ошибка — это нежелательный сюрприз, который мы успешно предсказали и ‘поймали’.

Лучшие практики: Путь к мастерству

1. Тестируем правильную функцию

Убедитесь, что ваш тест настроен на конкретную функцию, которую нужно проверить:

JS
Скопировать код
expect(() => incorrectFunction()).not.toThrowError();  // Здесь ошибок быть не должно
expect(() => correctFunction()).toThrowError();  // Здесь ожидаем ошибку

2. Строки и сообщения об ошибках: Гармоничное сочетание

Не забывайте использовать строки для формирования конкретных сообщений об ошибках в toThrowError.

3. Тонкости в деталях: Подготовка вызова функции

Как перед важным событием, функцию следует подготовить к вызову:

JS
Скопировать код
let boundFunction = myFunction.bind(context, arg1, arg2);  // Подготавливаем функцию
expect(boundFunction).toThrowError();  // Проверяем наличие ошибки

Полезные материалы

  1. Начало работы с Jasmine — основы тестирования с использованием Jasmine.
  2. Ваш первый набор тестов — гид по созданию тестов на исключения в Jasmine.
  3. Как создать тест, который ожидает срабатывания ошибки в Jasmine? — практические советы по тестированию ошибок на Stack Overflow.
  4. Пространство имён: matchers — обзор Jasmine matchers и работы с функцией expect.
  5. Ошибка – JavaScript | MDN — подробно о классе ошибок в JavaScript.
  6. Использование промисов – JavaScript | MDN — азы работы с ошибками в асинхронном коде на примере промисов.