7

我目前正在使用Jestreact-testing-library测试输入。我正在尝试测试 onChange 函数是否会在我的输入字段更改时触发。这是我的代码示例:

const placeHolder = 'first name';
const onChange = jest.fn();

test('<InputText/>', () => {

  const {getByPlaceholderText} = render(
    <InputText placeholder={placeHolder} onChange={onChange} />
  );

  const input = getByPlaceholderText(placeHolder);

  fireEvent.change(input, {
    target: {value: 'pls work'},
  });

  expect(onChange).toHaveBeenCalledTimes(1);
});

这是我运行此测试时在终端中得到的结果:

expect(jest.fn()).toHaveBeenCalledTimes(1)

Expected mock function to have been called one time, but it was called zero times.

我已经在其他测试中使用了 fireEvent.click() 函数,但没有任何问题,但 fireEvent.change() 似乎对我不起作用。

4

2 回答 2

5

事实证明,我的<InputText/>组件接受了一个onChangeFunc道具,而我试图给它一个普通的onChange道具。一旦我意识到这一点并给了它正确的道具,它就解决了这个问题。

于 2018-09-19T18:40:53.647 回答
1

而不是调用这个

expect(onChange).toHaveBeenCalledTimes(1);

你可以试试

expect(onChange).toHaveBeenCalled();
于 2021-11-27T19:45:28.333 回答