【发布时间】:2023-03-27 22:57:01
【问题描述】:
我有一个需要测试的简单功能组件。
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”访问该函数。
请帮忙!
【问题讨论】:
-
handleOnChange是函数内部声明的常量,外部不可用。顺便说一句,通常最好测试函数内部的内容是否已被调用或 UI 本身是否已更改。在这个例子中你应该断言console.log它被调用(我知道它不是真正的代码) -
Emanuele,非常感谢您的评论。你完全正确。
标签: reactjs testing jestjs enzyme