У меня есть компонент реакции (CreateForm). Компонент React зависит от модуля (Store). CreateForm имеет кнопку Отмена. При нажатии кнопки отмены должна быть вызвана функция handleCancel модуля Store.
Я безуспешно написал тест с помощью Jest:
test.only('should handle cancel button click', () => {
jest.mock('../../src/store');
const store = require('../../src/store');
const wrapper = shallow(<CreateForm />);
const cancelButton = wrapper.find('button').at(1);
cancelButton.simulate('click');
expect(store.default.handleCancel).toBeCalled();
});
Тест не удался. Имитационная функция не была вызвана, и тест не прошел. Компонент React не получает эту версию макета? Если да, то как исправить тест? Спасибо.
Мой компонент CreateForm выглядит примерно так:
import Store from './store';
render() {
return (
<Panel>
<FormControls />
<button onClick={Store.create}>Create</button>
<button onClick={Store.handleCancel}>Cancel</button>
</Panel>
);
}
Второй импровизированный тест, который мне подходит, показан ниже.
test.only('should handle cancel button click', () => {
const store = require('../../src/store').default;
const cancel = store.handleCancel;
store.handleCancel = jest.fn();
const wrapper = shallow(<CreateForm />);
const cancelButton = wrapper.find('button').at(1);
cancelButton.simulate('click');
expect(store.handleCancel).toBeCalled();
store.handleCancel = cancel;
});
Вышеупомянутый тест работает. Я вручную издеваюсь над функцией, провожу тест и после теста возвращаю функцию к исходному состоянию. Есть ли лучший способ или способ Jest написать вышеуказанный тест? Спасибо.