Я пытаюсь протестировать импортированный статический метод, который должен запускаться при нажатии кнопки. Вот компонент, на котором должен выполняться тест:
const NextButton = (props: ISubmitButtonProps) => (
<button
onClick={Service.goToNext}
className="col-2 submit"
type="submit"
disabled={props.submitting}>
Next
</button>
);
export default NextButton;
Теперь я хочу проверить, действительно ли выполняется метод goToNext
.
Для этого я использовал пример из здесь и добавил макет, который выглядит прекрасно, например:
const goToNextMock = jest.fn();
jest.mock('Services/service', () => ({
default: class {
public static goToNext() {
goToNextMock(); //the jest.fn from above
}
}
})
);
А потом написал тест для него, просто имитируя событие нажатия, а затем проверяя, был ли запущен jest.fn()
:
it('should call goToNext on button click', () => {
//button is set before as shallow(<NextButton submitting={false}/>);
button.simulate('click');
expect(goToNext).toHaveBeenCalled();
})
Проблема в том, что причины неизвестны, тест не сохраняется. Дает мне
Ожидаемая фиктивная функция была вызвана.
РЕДАКТИРОВАТЬ: Тот же результат будет происходить при попытке издеваться над этим способом (обратите внимание на дополнительные preventDefault()
it('should call goToNextReport on button click', () => {
const mock = jest.fn();
Service.goToNext = mock.bind(Service);
button.simulate('click', { preventDefault() {} });
expect(mock).toHaveBeenCalled();
})
Я довольно плохо знаком с JEST и JS-тестированием. Кажется, макет был сделан правильно, но я все еще не могу проверить метод.
Есть идеи на эту тему?
Вся помощь будет потрясающей!
РЕДАКТИРОВАТЬ: проблема была также передана на канал GEST GESTUB: https://github.com/facebook/jest/issues/8695