我正在使用sinon chai和酶测试React组件。 我正在编写一个具有HOC的插件,它将生成一个新的React组件。
我不确定用户将传递给HOC的内容,因此我想检查它是否是React Component。我能找到的唯一(丑陋)方式是适应这个StackOverflow Answer
export function isClassComponent(component) {
return (
typeof component === 'function' && !!component.prototype.isReactComponent
)
}
export function isFunctionComponent(component) {
return (
typeof component === 'function' && String(component).includes('.createElement')
);
}
export function isReactComponent(component) {
return !!(isClassComponent(component) || isFunctionComponent(component))
}
这是一种模糊的方法来测试组件是否是React组件。
问题是当我的组件是一个sinon间谍。
const FnChild = (props) => (<div id="child-fn">{props.children}</div>);
const ChildSpy = spy(FnChild);
现在测试isReactComponent(ChildSpy)
将失败,因为isFunctionComponent
将实际检查函数的主体,并且在ChildSpy
的情况下将不再是原始函数的主体。< / p>
我知道我不应该依赖身体功能,但这是我能找到的最佳方式。
无论如何,有没有办法从间谍访问原来的身体?在这种情况下,我怎么能将它传递给我的isFunctionComponent
?