Я новичок в React Unit Testing и застрял с этим вопросом.
У меня есть дочерний компонент с обратным вызовом onClick
к его родителю. Затем родитель обновит дочерний элемент props
на основе обратного вызова. У ребенка есть собственный стиль, основанный на значении реквизита.
Примерно так:
// Parent
const ParentComponent = () => {
let isActive = false;
const clickCallback = () => {
isActive = true;
}
return <ChildComponent handleClick={clickCallback} active={isActive} />
}
// Child
const ChildComponent = (props) => {
return <button onClick={props.handleClick} style={props.active} />
}
Мой вопрос: как я могу проверить это поведение? Я хочу убедиться, что при нажатии на дочерний компонент мой собственный стиль будет обновлен.
Я попробовал этот подход, но он не сработал:
let mockIsActive = false;
const mockCallback = () => {mockIsActive = true;}
ReactDOM.render(
<ChildComponent handleClick={mockCallback} active={mockIsActive} />,
container
);
const myChild = container.querySelector("button");
expect(myChild.getComputedStyle).toEqual("my check here");
myChild.dispatchEvent(new MouseEvent("click", {bubbles: true}));
expect(myChild.getComputedStyle).toEqual("my new check here");
Я предполагаю, что я обновляю переменную, но она на самом деле не связана с компонентами реквизита?
Дополнительная информация:
- Поведение работает нормально, когда я запускаю проект (изменения пользовательского стиля)
- В моем конкретном сценарии мне нужно управлять дочерним реквизитом от родителя
- В настоящее время у меня есть
react-test-renderer
и react-dom/test-utils
, но я могу включить внешние библиотеки при необходимости
- Самый близкий ответ, который я нашел в Интернете, был здесь , но я не смог применить решения в моем проекте
Спасибо!