Метод hasClass() является важным инструментом для работы
с тестированием в Enzyme. Этот метод используется для проверки наличия
определённого CSS класса у компонента. В тестировании React-компонентов
проверка классов помогает убедиться, что визуальные и стилистические
изменения происходят корректно при изменении состояния или при вызове
событий.
wrapper.hasClass(className)
Параметры:
className — строка, которая представляет имя CSS
класса. Это может быть как одиночное имя класса, так и комбинация
классов, разделённых пробелами.Возвращаемое значение: Метод возвращает логическое
значение true или false, в зависимости от
того, присутствует ли указанный класс у компонента. Если класс найден,
возвращается true, если не найден — false.
Рассмотрим простой компонент React с классом, который зависит от его состояния:
import React, { useState } from 'react';
const MyComponent = () => {
const [active, setActive] = useState(false);
return (
<button
className={active ? 'active' : 'inactive'}
onCl ick={() => setActive(!active)}
>
Click me
</button>
);
};
Для тестирования этого компонента можно использовать Enzyme и метод
hasClass() для проверки того, что класс изменяется в
зависимости от состояния компонента:
import { shallow } from 'enzyme';
import MyComponent from './MyComponent';
describe('MyComponent', () => {
it('должен переключать классы при клике', () => {
const wrapper = shallow(<MyComponent />);
// Проверка начального состояния (класс "inactive")
expect(wrapper.find('button').hasClass('inactive')).toBe(true);
// Клик по кнопке и проверка изменения класса
wrapper.find('button').simulate('click');
expect(wrapper.find('button').hasClass('active')).toBe(true);
});
});
hasClass()При вызове метода hasClass() Enzyme ищет указанный класс
среди атрибутов компонента. Важно помнить, что метод проверяет класс в
атрибуте className, который содержит строку, состоящую из
всех классов, применённых к элементу. Например, если элемент имеет
классы "inactive active", метод будет искать наличие
класса, указанного в параметре.
Метод hasClass() может проверять наличие только одного
класса за раз. Если необходимо проверить несколько классов, следует
использовать несколько проверок или комбинировать их в тесте:
it('проверка нескольких классов', () => {
const wrapper = shallow(<MyComponent />);
// Проверка наличия класса "inactive"
expect(wrapper.find('button').hasClass('inactive')).toBe(true);
// Проверка отсутствия другого класса
expect(wrapper.find('button').hasClass('active')).toBe(false);
});
В случае, если класс компонента зависит от состояния или пропсов,
важно правильно учесть его динамическую природу при тестировании. Метод
hasClass() будет проверять текущий класс элемента, исходя
из актуального состояния компонента в момент теста.
it('проверка динамического изменения класса', () => {
const wrapper = shallow(<MyComponent />);
// Начальное состояние (класс "inactive")
expect(wrapper.find('button').hasClass('inactive')).toBe(true);
// Изменение состояния компонента
wrapper.find('button').simulate('click');
// После клика класс меняется на "active"
expect(wrapper.find('button').hasClass('active')).toBe(true);
});
hasClass()Метод hasClass() может быть полезен для тестирования
изменений классов, однако он не может быть использован для проверки
наличия стилей, применённых через классы. В таких случаях полезнее будет
использовать методы, которые проверяют визуальные изменения компонента,
например, toHaveStyle() в сочетании с
jest.
Если в тестах возникнут проблемы, например, элемент не имеет ожидаемого класса, следует проверить правильность синтаксиса в строках кода и убедиться, что класс добавляется или удаляется корректно, в зависимости от состояния компонента.
Метод hasClass() является эффективным инструментом для
тестирования наличия CSS классов в компонентах React. Он позволяет легко
проверять правильность применения стилей и классов в зависимости от
состояний и взаимодействий с компонентами.