reactjs - 如何测试函数是否在功能性 React 组件中调用 onChange?

标签 reactjs testing jestjs enzyme

我有一个需要测试的简单功能组件。

const Product = () => {
    const handleOnChange = (value) => {
        console.log(value);
    }

    return (
        <div>
            <input type="text" onChange={(e) => {handleOnChange(e.target.value)}} />
        </div>
    )
}

我想测试当输入更改其值时是否调用了“handleOnChange”函数。我试过了:
let wrapper;
beforeEach(() => {
    wrapper = shallow(<Product />);
});
describe('Product interactions', () => {
it('should call handleOnChange function on input change', () => {

  const mockedhandleOnChange = jest.fn(); 
  wrapper.handleOnChange = mockedhandleOnChange;
  wrapper.find('input').simulate('change', {target: {value: 10}});
  expect(mockedhandleOnChange).toHaveBeenCalledTimes(1);    
});

});

当然它不起作用,因为我无法通过“wrapper.handleOnChange”访问该功能。

请帮忙!

最佳答案

it('should call handleOnChange function on input change', () => {
    const wrapper = shallow(<Product />);
    const input = wrapper.find('input');
    input.simulate('change', { target: { value: 10 } });
    input = wrapper.find('input');
    expect(input.props().value).toEqual(10);
  });

关于reactjs - 如何测试函数是否在功能性 React 组件中调用 onChange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59970684/

相关文章:

javascript - 我如何有条件地在 react 中渲染 Font Awesome 图标

node.js - 将 cypress.io 测试用例移交给非技术用户

angular - 编写多个测试用例时,ActivatedRoute 参数在单元测试中不起作用

reactjs - 使用 Jest 和 Enzyme 调用函数

javascript - 在 Jest 中使用 'new' 关键字模拟外部服务

node.js - 压缩 Node App 并让依赖项开箱即用

javascript - 为什么 <Route component={Menu}/> 而不是 <Menu/>?

reactjs - 无法将 className 或 style 等 Prop 传递给自定义组件的 Prop

javascript - react js播放本地MP3文件

python - 从 pytest 断言中解析出数据并转换为字符串