Jest:无法设置未定义的属性“props”
2016-04-20
3856
我开始学习 Jest,并创建了这个测试。但是当我运行它时,我收到以下消息。
我是否以错误的方式将 props 传递给 AppComponent?
TypeError: Cannot set property 'props' of undefined
App.js:
const { store } = this.props;
return (
<div>
<h2 className={css(styles.hover)}>Welcome to the { store.name } project!</h2>
<h3>This project is { store.description }.</h3>
<MyComponent store={store} />
</div>
);
App-test.js:
const storeProp = {
name: 'Reaxor',
description: 'Hello'
}
describe('App', () => {
it('returns the correct text', () => {
// Render a checkbox with label in the document
const app = TestUtils.renderIntoDocument(
<App store={storeProp} />
);
const appNode = ReactDOM.findDOMNode(app);
const h2 = TestUtils.findRenderedDOMComponentWithTag(app, 'h2')
const h3 = TestUtils.findRenderedDOMComponentWithTag(app, 'h3')
expect(h2.textContent).toEqual('Welcome to the Reaxor project!');
expect(h3.textContent).toEqual('This project is Hello.')
});
});
3个回答
在我看来,有些东西被模拟了,但其实不应该被模拟。您可以尝试在配置中禁用自动模拟
"automock": false
,看看该模型是否更适合您 :)
cpojer
2016-04-21
遗憾的是,我目前无法添加评论,但我想评论一下:行号会有所帮助(或者更好的是,堆栈跟踪)。是
const app = TestUtils.renderIntoDocument(
<App store={storeProp} />
);
引发了错误吗?
您还需要提供有关 App.js 的更多上下文。
React 在内部创建了一个“props”参数,它是一个对象,并将 props 作为参数粘贴到它上面。它试图对未定义的东西执行此操作。这表明您获取
<App />
的方式存在问题。
- 您是否在测试文件中需要 App.js?
- 您是否确保 jest 没有嘲笑它? (在某些版本中,它默认对所有必需文件执行此操作。)
- App.js 是否正确编写(我希望该文件中的内容比您向我们展示的要多得多……)?
- 您是否正确地从 App.js 导出(这似乎是此错误消息的一个很好的候选对象)?
至于您的 实际 问题,不,您没有错误地传递 props。语法的这一部分是正确的。
Kyle Baker
2016-04-20
这是 App.js 的完整版本吗? 您应该使用类符号来使用 this.props。 如果您使用函数符号,则只需 props。
loveJS
2018-01-05