Javascript 如何使用jest&;检查函数是否有参数而不检查其值;反应组分中的酶?

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

我想测试一个react组件,其中父元素
上有一个
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!
});