我正在尝试使用浅层渲染器用酶测试HoC,但我不断收到以下警告:Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object.
以下是重现警告的简单示例:
import React from 'react';
import { shallow } from 'enzyme';
const testHoc = Wrapped => {
return () => {
return (
<div>
<div>Wrapping</div>
<Wrapped/>
</div>
);
};
};
const Component = testHoc(<div>Hi</div>);
const wrapper = shallow(<Component/>);
我不知道为什么会这样,因为在应用程序实际运行时(只有在运行测试时)我没有收到任何这些错误。这些警告的原因是什么?
我正在使用React 16.3.2和酶3.3.0
答案 0 :(得分:1)
您很近。在测试中,当您需要传递组件时,您将JSX元素传递给testHoc。
// this is just a JSX Element
const element = (<div>Hi</div>);
// this is a simple React component
const SimpleComponent = () => (<div>Hi</div>);
将创建组件的行更改为
const Component = testHoc(() => <div>Hi</div>);
一切都会正常工作。