无法读取未定义的属性“ id”-REACT JS

时间:2019-01-15 15:20:29

标签: reactjs unit-testing

我的大多数测试都正确运行,但是根据测试,我的比赛道具似乎不对。我还有另外3个道具,而且都在传递。

这是我到目前为止所拥有的: EditUser.test.js

describe('EditUser', () => {

let tree;
let baseProps;
let mockmatch = {
    params: {
        id:{
            URLParams: "test edit user and add user"
        },
        type: "test",
    }
};

beforeEach(() => {
    baseProps = { 
        match: mockmatch 
 }
})

it (' Should render without a mockmatch props',() => {
  baseProps = {
  ...baseProps,
 match: {},  
 };
     tree = renderer.create(<EditUser {...baseProps } />)
     let treeJson = tree.toJSON(); 
     expect(treeJson).toMatchSnapshot(); 
     tree.unmount() 
  });

EditUser.js: 这是错误的位置,就在render()

render() {
let URLParams = this.props.match.params;
let title = URLParams.id ? 'Edit User' : 'Add User';
let type = URLParams.type;

1 个答案:

答案 0 :(得分:2)

原因是,当您在match块内为{}分配了更新的值时,baseProps为空的it

baseProps = {...baseProps, match: {} };

这表示您在此处访问params对象时不包含该对象:

let URLParams = this.props.match.params;

  

这就是为什么当您尝试访问id时抛出该错误的原因   因为URLParamsundefined


有两种解决方法。

解决方案#1

在测试中,您可以给它赋一个空的match值,而不是给params分配一个空对象。

baseProps = {...baseProps, match: { params: {} } };

解决方案2

或者,当您从props(在这种情况下将是一个空对象)获取值时,也可以分配一个后备值URLParams

let URLParams = this.props.match.params || {};