供应商模块上的ReactJs jest测试失败

时间:2018-06-18 13:59:21

标签: reactjs jestjs

我正在尝试在我的项目中使用Jest来测试我的App类:

it('renders correctly', () => {
  const tree = renderer
    .create(<Router><App /></Router>)
    .toJSON();
  expect(tree).toMatchSnapshot();
});

但是我从供应商模块中得到错误,错误是这样的:

   TypeError: Cannot read property 'addEventListener' of null

      at node_modules/hammerjs/hammer.js:222:16

我不知道如何解决它

1 个答案:

答案 0 :(得分:2)

为什么它不起作用?

  

renderer.create将React组件呈现给纯JavaScript对象,   不依赖于DOM或本机移动环境。

参考:https://reactjs.org/docs/test-renderer.html#testrenderercreate

您是否看到了hammerjs/hammer的实现,您会发现在渲染的组件中找到addEventListener后,会在目标DOM元素上调用null。当DOM环境不存在时,目标DOM元素变为mount,因此错误。

如何解决?

  

如果您想断言并操纵您渲染的组件,请执行此操作   可以使用Enzyme或React的TestUtils。

参考:https://facebook.github.io/jest/docs/en/tutorial-react.html#dom-testing

当您拥有与DOM交互的元素时,您可以使用Enzyme的it('renders correctly', () => { const tree = mount(<Router><App /></Router>); expect(tree).toMatchSnapshot(); }); 进行完全DOM渲染。 http://airbnb.io/enzyme/docs/api/mount.html

所以这应该有效:

$query = "SELECT company_name FROM company WHERE company_name LIKE '%".$searchTerm."%' ORDER BY company_name ASC;";