【发布时间】:2020-07-14 17:24:19
【问题描述】:
我遇到了以下问题 - 我需要编写一个测试来检查如果单击相同的值,是否不执行 onChange。
这里是 onChange:
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
if (sameValueClicked) return;
setValue(event.target.value)
};
这是我迄今为止的测试:
it('Does not call onChange if same value selected', async () => {
render(
<ValuePicker
value={"1st"}
onChange={jest.fn()}
/>
);
fireEvent.click(screen.getByLabelText('Value Picker'));
await waitFor(() => screen.getByRole('dialog'));
fireEvent.click(screen.getByLabelText('1st'));
expect(screen.queryByRole('dialog')).toBeInTheDocument();
});
现在,如果正在打开的对话框保持打开但不是最佳解决方案,则测试通过。
有什么想法吗?
【问题讨论】:
-
显示更多上下文:
sameValueClicked、setValue()是什么? -
需要明确的问题陈述。 正在打开的对话框保持打开状态 - 这是什么意思? 这不是最佳解决方案 - 最佳解决方案是什么样的,它到底有什么问题?
-
@k-wasilewski:
sameValueClicked是一个布尔字段,指示是否与单击当前值相同。setValue是一个设置当前值的函数。 @EstusFlask:选择一个值后,显示值的对话框应该关闭。我想象可选的解决方案是:if the same value is clicked, make sure onChange is not executed. -
我的意思是:向我们展示
setValue()的实现。无论如何,您可以测试一个函数是否被调用,正如@Muhammad Ali 所建议的那样。
标签: reactjs typescript jestjs react-testing-library