Вы можете воспроизвести проблему в следующих кодах и в поле:
В качестве примера я создал компонент, который использует следующий код для получения случайного изображения при каждом нажатии кнопки формы:
import { Button } from "antd";
...
class ContinuousMemeDeliveryApi extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
static defaultProps = { getImage };
state = { image: images[0], random: 0 };
handleClick = async e => {
e.preventDefault();
const { data } = await this.props.getImage();
this.setState({ image: data.image, random: data.random });
};
...
render() {
return (
<form onSubmit={this.handleClick}>
<Button htmlType="submit">Click Me</Button>
...
</form>
);
}
Это работает, как и ожидалось, и я сделал следующий код для проверки реализации:
test("loads random memes on click", async () => {
const mockGetImage = jest.fn(() =>
Promise.resolve({ data: { image: "testImage.jpg" } })
);
const { getByText } = render(
<ContinuousMemeDeliveryApi getImage={mockGetImage} />
);
const clickMeButton = getByText(/click/i);
fireEvent.click(clickMeButton);
// @TODO: fix assertion
expect(mockGetImage).toHaveBeenCalledTimes(1);
});
Однако проверка завершается неудачно со следующим сообщением об ошибке:
expect(jest.fn()).toHaveBeenCalledTimes(1)
Expected mock function to have been called one time, but it was called zero times.
Есть идеи, почему это не удается?