Тестирование фронтенда — сложная задача, поэтому создатели фреймворков всячески пытаются её упростить. React в этом плане, как мне кажется, продвинулся дальше всех, и не последнюю роль здесь сыграло то, что тестовый фреймворк jest
также разрабатывается Facebook. Соответственно, уровень поддержки фронтенд-тестирования и конкретно React крайне высок.
jsdom - реализация DOM API на чистом JS для использования в Node.js. Основной целью библиотеки является эмуляция подмножества функций браузера, достаточных для тестирования и парсинга сайтов. jsdom встроен в jest и не требует абсолютно никакой настройки. В этом легко убедиться, если открыть тесты Хекслета в любой практике, работающей с браузером. С точки зрения использования это выглядит так, что прямо в тесте у нас доступен document
и window
.
test('normalize', () => {
const expected = '<p class="row">Text</p>';
document.documentElement.innerHTML = expected;
normalize(document);
expect(document.body.innerHTML).toEqual(expected);
});
Возникает вопрос: зачем использовать jsdom, когда есть драйверы, работающие с настоящими браузерами. Ответов несколько:
Единственный серьёзный недостаток (он же и плюс) заключается в том, что jsdom — это не браузер. Другими словами, тесты на jsdom могут вполне работать, а код в браузере нет, и наоборот. Кроме того, jsdom сильно отстаёт в развитии от тех же браузеров. Новые фичи в нем появляются сильно позже, да и старые работают не все. Во многом эта проблема нивелируется использованием полифилов, но если вы используете что-то уж совсем экзотическое, то, возможно, придётся отказаться. По своей практике скажу, что с этим всем можно жить и полифилы действительно спасают.
Так как React генерирует виртуальный DOM, этим можно воспользоваться. Пакет react-test-renderer
предоставляет возможность отрендерить компонент React без необходимости взаимодействия с браузером.
import reactTestRenderer from 'react-test-renderer';
const renderer = reactTestRenderer.create(
<a href="https://www.facebook.com/">Facebook</a>
);
console.log(renderer.toJSON());
// { type: 'a',
// props: { href: 'https://www.facebook.com/' },
// children: [ 'Facebook' ] }
С этим пакетом легко использовать снепшот-тестирование в Jest. Достаточно передать в expect
результат вызова функции toJSON
.
Библиотека, разработанная программистами Airbnb для полноценного тестирования приложений на React.
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт