我试图用酶编写测试,但是每次我通过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会发生渲染=>渲染会引发错误,因为您尝试遍历未定义的集合

07-24 20:54