Что такое jest-dom

Ответ

Jest-dom — это библиотека для расширения возможностей Jest, добавляющая специальные матчеры (утверждения) для тестирования DOM. Она упрощает проверку элементов в документе, делая тесты более читаемыми и выразительными.

Пример использования:

import '@testing-library/jest-dom';

test('проверка кнопки', () => {
  const button = document.createElement('button');
  button.disabled = true;

  expect(button).toBeDisabled();
  expect(button).toHaveAttribute('disabled');
});

Основные преимущества:

  • Специальные матчеры (toBeVisible, toHaveClass, toHaveTextContent и др.)
  • Улучшенные сообщения об ошибках
  • Интеграция с Testing Library
  • Поддержка пользовательских матчеров

Устанавливается как dev-зависимость:

npm install --save-dev @testing-library/jest-dom

Ответ 18+ 🔞

А, ну вот, опять эти ваши библиотеки для тестирования! Jest-dom, говоришь? Так, сейчас разберёмся, что за зверь такой.

Смотри, есть у тебя Jest — он, конечно, молодец, но когда дело доходит до проверки, что там в браузере творится, он как-то сразу тупеет, блядь. Ты ему: «Эй, а кнопка-то активна?», а он тебе в ответ: «А чё такое „активна“? Я про такой матчер не слышал, иди нахуй». И сидишь потом, вручную проверяешь disabled атрибут, как последний лузер.

Так вот, jest-dom — это такой костыль, но охуенный, который этому Jest'у мозги вправляет. Научит его понимать, что такое DOM. Кинул ему эту библиотеку, и у тебя сразу появляется куча новых, понятных даже мартышке, проверок.

Вот смотри, как жизнь меняется:

import '@testing-library/jest-dom';

test('проверка кнопки', () => {
  const button = document.createElement('button');
  button.disabled = true;

  expect(button).toBeDisabled(); // Вместо expect(button.disabled).toBe(true)
  expect(button).toHaveAttribute('disabled'); // И это тоже проверим, на всякий ебаный случай
});

Видишь разницу? Раньше бы писал expect(button.disabled).toBe(true), а теперь просто toBeDisabled(). Читается, как книга, блядь. И если что-то пойдёт не так, он тебе не какую-то хуйню в консоль вывалит, а внятно скажет: «Ожидалось, что элемент будет disabled, а он, сука, активный!».

Чем он ещё хорош, этот ваш jest-dom?

  • Матчеры на любой вкус. toBeVisible() (видим ли элемент), toHaveClass() (есть ли у него такой CSS-класс), toHaveTextContent() (а что внутри написано, не «Hello World» ли?) — в общем, всё, что душе угодно.
  • Сообщения об ошибках. Они не просто «expected true to be false», а человеческие, в рот меня чих-пых! Сразу видно, где косяк.
  • Дружит с Testing Library. Если ты её используешь (а ты должен, ибо не мудак), то они вместе просто песенка.
  • Можно свои матчеры прикрутить. Если вдруг тебе мало — ну ты понтовый, блядь.

Ставится проще простого, как dev-зависимость:

npm install --save-dev @testing-library/jest-dom

И всё. Подключил в тестах и живи, как сыр в масле катаешься. В общем, вещь полезная, если, конечно, не страдаешь мазохизмом и не любишь писать километровые expect(element.querySelector('button').getAttribute('aria-hidden')).