我试图用酶编写测试,但是每次我通过setProps方法时,都会不断收到错误消息:TypeError:无法读取未定义的属性“ map”。这使我感到困惑,因为在道具上调用了.map,据我所知,在下面的setProps函数中正确定义了它们。如果定义了setProps,为什么会出现此错误,该如何解决?
beforeEach(() => {
const wrapper = shallow(<Map />);
})
describe('<Map />', () => {
it('should render some stuff', () => {
wrapper.setProps({ stories: [{id: 1, title: "hello world", edit: true}] })
});
});
该组件是:
import React, { Component } from 'react';
class Map extends Component {
state = {
edit: true
}
render() {
let layout = (
<div>
{ this.props.stories.map((story, index) => {
return story.edit ?
<div key={story.id}>
<br/>
<input type="text" defaultValue={story.title} ref="stuff2" /><button name="Save" onClick={this.props.handleToggle} value={story.id}>Save</button>
<br/>
</div>
:
<div key={story.id}>
<br/>
<div ref="1">{story.title}<button key={story.id} onClick={this.props.handleToggle} value={story.id}>Edit</button><button onClick={this.props.handleDelete}>Delete</button></div>
<br/>
</div>
})}
</div>
)
return (
<div>
{layout}
</div>
);
}
}
最佳答案
请检查与酶发生反应的方式,由于生命周期的作用,this.props.stories
最初为undefined
。
因此,在测试中使用setProps
之前,没有任何内容作为stories
传递给初始渲染。
而且componentWillMount会发生渲染=>渲染会引发错误,因为您尝试遍历未定义的集合