Reactjs Redux+;karma webpack-导入React.Component时无法读取未定义的displayName
我正在使用并且正在重构React组件,以便在多个地方使用。我移动了部件 到它自己的文件,这样我就可以通过在我稍后包含在页面上的HOC中应用Reactjs Redux+;karma webpack-导入React.Component时无法读取未定义的displayName,reactjs,webpack,redux,react-redux,karma-webpack,Reactjs,Webpack,Redux,React Redux,Karma Webpack,我正在使用并且正在重构React组件,以便在多个地方使用。我移动了部件 到它自己的文件,这样我就可以通过在我稍后包含在页面上的HOC中应用MapStateTrops/mapDispatchToProps以不同的方式导入它和它 以下是场景: EventTable-imports EventTable组件,exportsconnected/wrapped组件 MyEventTable-导入s EventTableComponent,导出connected/wrapped组件 EventTableCo
MapStateTrops
/mapDispatchToProps
以不同的方式导入它和它
以下是场景:
EventTable
-import
s EventTable组件,exportsconnect
ed/wrapped组件
MyEventTable
-导入
s EventTableComponent,导出connect
ed/wrapped组件
EventTableComponent
-定义用于呈现数据行的共享道具/行为
当我git mv
EventTable到EventTableComponent
并重构代码,使连接的东西在HOCs中时,测试开始无法导入EventTableComponent
仅在karma网页包中导入EventTableComponent
。Chrome工作正常,视图渲染完美。QA很高兴,或者会很高兴,但是我的构建失败了
构建失败是因为WrappedComponent
未为EventTable
和MyEventTable
组件定义,这导致connect
在摘要中抛出消息(无法读取未定义的displayName
),但我甚至没有将这些文件导入到我的测试中!相反,它在karma webpack构建时失败,但在运行任何测试之前失败
我通过破坏视图并进行如下“假”/“替换”修复了本地构建:
function EventTableComponent () {
return (<div>garbage here</div>);
}
函数EventTableComponent(){
返回(此处为垃圾);
}
构建通过
这一切中最令人困惑的部分是什么?我甚至根本不测试HOC。我只将EventTableComponent导入测试,但是karma webpack
,如中所建议
我写了一个简单的例子来说明:
我通过欺骗模块系统解决了这个问题
// EventTableComponentWrapper.jsx
import EventTableComponent from './EventTableComponent';
if (process.env.NODE_ENV === 'test') {
module.exports = require('./EventTableComponent.test.jsx');
} else {
module.exports = EventTableComponent;
}
我在两个HOC组件中导入了这个文件,根据我的环境变量,我得到了正确的文件,Karma Webpack被欺骗而没有爆炸
我是根据一些线索得出这个结论的,但这篇文章值得赞扬:
以及Webpack Gitter频道的Wout Mertens,他们向我透露了与ES6类导入/导出相关的问题。Wout Mertens(来自Webpack Gitter)建议将导入
替换为需要
。这导致测试通过,但导入在应用程序中停止工作,因此组件没有呈现。这仍然是黑客行为,我喜欢更好的解决方案