使用Jest和Enzyme模拟自定义事件

时间:2018-04-11 10:19:01

标签: reactjs jestjs enzyme ag-grid ag-grid-react

class AgGridWrapper extends React.Component {
  render() {
    return <AgGridReact onCellClicked={this.onCellClicked.this(bind)}
  }
  onCellClicked= (event) = > {
    event.setDataValue(newValue);
  }
}

我在 AgGridReact 周围有一个包装器组件 AgGridWrapper (AgGridReact是一个有助于创建HTML网格的节点模块)。在此示例中,当我单击AgGrid上的任何单元格时,它将更改单元格的值。

我想测试一下onCellClicked事件。所以我做了以下。

const wrapper= shallow(<AgGridWrapper />);
const agGridReact = wrapper.find(AgGridReact);

const eventObject={};
agGridReact.simulate('cellClicked',eventObect);

我的目的是模拟cellClicked事件并检查单元格的值是否已更改。 但是在这里我无法访问agGridReact的 setDataValue()方法。 所以我无法模仿这个 eventObject

我现在在这里被踩了几天。我的印象是技术上无法测试此功能,因为我们无法访问 setDataValue

对此有何建议?

1 个答案:

答案 0 :(得分:2)

由于simulate与调用on{propName}下的函数没什么不同。出于某种原因,这仅适用于标准事件,但最终与您自己调用没有区别:

const eventObject = {setDataValue: jest.fn()}
gGridReact.prop('cellClicked')(eventObect);
expect(eventObject).toHaveBeenCalled()