我的大多数测试都正确运行,但是根据测试,我的比赛道具似乎不对。我还有另外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;
答案 0 :(得分:2)
原因是,当您在match
块内为{}
分配了更新的值时,baseProps
为空的it
。
baseProps = {...baseProps, match: {} };
这表示您在此处访问params
对象时不包含该对象:
let URLParams = this.props.match.params;
这就是为什么当您尝试访问
id
时抛出该错误的原因 因为URLParams
是undefined
。
有两种解决方法。
解决方案#1
在测试中,您可以给它赋一个空的match
值,而不是给params
分配一个空对象。
baseProps = {...baseProps, match: { params: {} } };
解决方案2
或者,当您从props(在这种情况下将是一个空对象)获取值时,也可以分配一个后备值URLParams
。
let URLParams = this.props.match.params || {};