我正在尝试在我的项目中使用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
我不知道如何解决它
答案 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;";