Javascript 如何使用jest&;检查函数是否有参数而不检查其值;反应组分中的酶?
我想测试一个react组件,其中父元素Javascript 如何使用jest&;检查函数是否有参数而不检查其值;反应组分中的酶?,javascript,reactjs,unit-testing,jestjs,enzyme,Javascript,Reactjs,Unit Testing,Jestjs,Enzyme,我想测试一个react组件,其中父元素上有一个onClick事件侦听器,它将e.target作为参数传递给onClick函数 我尝试使用酶模拟点击。模拟并传递模拟函数和模拟参数,如下所示: let wrapper, cellClick, e; beforeEach(() => { cellClick = jest.fn(); e = { target: "div" }; wrapper = shallow(<Board onCellClick={cellCli
上有一个onClick
事件侦听器,它将e.target
作为参数传递给onClick
函数
我尝试使用酶模拟点击。模拟并传递模拟函数和模拟参数,如下所示:
let wrapper, cellClick, e;
beforeEach(() => {
cellClick = jest.fn();
e = {
target: "div"
};
wrapper = shallow(<Board onCellClick={cellClick} />);
});
afterEach(() => {
cellClick.mockReset();
});
it("should call props.cellClick() whith e.target argument", () => {
wrapper.simulate("click", e.target);
expect(cellClick.mock.calls[0][0]).toBe(e.target);
});
我希望simulate方法模拟实际的点击,这样它就有了一个事件对象,该对象将包含子元素作为目标,而不需要我使用模拟对象。
或者至少我想在不检查参数值的情况下测试参数的存在性。看起来您正在将e.target
传递给包装器。simulate
…只要将其更改为e
,它就会工作:
it("should call props.cellClick() whith e.target argument", () => {
wrapper.simulate("click", e); // <= pass e
expect(cellClick.mock.calls[0][0]).toBe(e.target); // Success!
});
it(“应该使用e.target参数调用props.cellClick(),()=>{
wrapper.simulate(“click”,e);//它工作了!谢谢,但我不明白当传递e.target
onClick
绑定到这个函数e=>props.onCellClick(e.target)}时它为什么不工作
因此,用于模拟事件的对象需要有一个target
属性,以便事件的target
属性可以传递给道具
Interaction with the board cells › should call props.cellClick() whith e.target argument
expect(received).toBe(expected) // Object.is equality
Expected: "div"
Received: undefined
49 | it("should call props.cellClick() whith e.target argument", () => {
50 | wrapper.simulate("click", e.target);
> 51 | expect(cellClick.mock.calls[0][0]).toBe(e.target);
| ^
52 | });
53 | });
54 |
at Object.toBe (components/Board/Board.test.js:51:40)
it("should call props.cellClick() whith e.target argument", () => {
wrapper.simulate("click", e); // <= pass e
expect(cellClick.mock.calls[0][0]).toBe(e.target); // Success!
});