Javascript TypeError:无法读取属性';地图';酶与摩卡的未定义反应试验
当我运行测试时,返回一个错误:Javascript TypeError:无法读取属性';地图';酶与摩卡的未定义反应试验,javascript,reactjs,mocha.js,chai,enzyme,Javascript,Reactjs,Mocha.js,Chai,Enzyme,当我运行测试时,返回一个错误:TypeError:无法读取未定义的的属性“map” 我正在用Jest、Ezyme和mocha为我的组件编写一个组件测试。 下面是我的组件` 从“React”导入React; 从“../actions/AppActions”导入AppActions; 从“../components/MessageForm.jsx”导入MessageForm; /** * *@class留言板 * *@extends{React.Component} */ 类MessageBoa
TypeError:无法读取未定义的
的属性“map”
我正在用Jest、Ezyme和mocha为我的组件编写一个组件测试。
下面是我的组件`
从“React”导入React;
从“../actions/AppActions”导入AppActions;
从“../components/MessageForm.jsx”导入MessageForm;
/**
*
*@class留言板
*
*@extends{React.Component}
*/
类MessageBoard扩展了React.Component{
/**
*@description创建留言板实例
*
*@memberofmessageboard
*/
构造函数(){
超级();
此.state={
消息:“”,
组ID:“”,
};
}
/**
*@description从父组件接收道具
*
*@param{any}nextrops
*
*@memberofmessageboard
*/
组件将接收道具(下一步){
这是我的国家({
groupId:nextProps.groupId,
});
}
/**
*@description从商店获取消息
*@memberofmessageboard
*/
onStoreChange=()=>{
这是我的国家({
groupMessage:AppStore.getAllMessages(),
});
}
/**
*@param{any}事件
*
*@memberofmessageboard
*/
handlePriority=(事件)=>{
这是我的国家({
优先级:event.target.value
});
}
/**
*@param{any}事件
*
*@memberofmessageboard
*/
onChange=(事件)=>{
这是我的国家({
消息:event.target.value
});
}
/**
*@param{any}事件
*
*@memberofmessageboard
*/
onSubmit=(事件)=>{
event.preventDefault();
const{text,type}=this.refs;
const messageDetail={
消息:this.state.message,
优先级:this.refs.type.value,
};
const groupId=this.state.groupId;
如果(组ID!=''){
AppActions.postMessage(messageDetail,groupId);
text.value='';
type.value='正常';
}
}
/**
*@memberofmessageboard
*
*@returns{any}返回呈现的组件
*/
render(){
const messageList=this.props.groupMessage.map((groupMessage,index)=>
{groupMessage.message}
{groupMessage.time}
);
返回(
提交
正常的
紧急的
批评的
);
}
}
导出默认留言板
有一件事我不明白——你在onStoreChange
中对groupMessage
执行setState
,但随后从道具渲染它
如果要从道具渲染,应在defaultProps
中为其指定默认值:
class MessageBoard extends React.Component {
static defaultProps = {
groupMessage: []
}
或者,如果您打算从状态渲染它,那么您也应该在初始状态中为它设置一个默认值。有一件事我不明白——您在
onStoreChange
中对groupMessage
执行设置状态
,但随后从道具渲染它
如果要从道具渲染,应在defaultProps
中为其指定默认值:
class MessageBoard extends React.Component {
static defaultProps = {
groupMessage: []
}
或者,如果您想从状态呈现它,那么您还应该在初始状态中为它提供一个默认值。您的组件需要
groupMessage
prop:const messageList=this.props.groupMessage.map((groupMessage,index)
,但您没有传递任何值shall()
。因此出现错误。另外,作为建议,您可以在每次之前使用beforeach
并在其中装载,而不是在每个it中初始化。您的意思是我应该将它传递给shallow()
像这样吗?传递的值是任意值。我以前做过并传递了值,但它一直抛出错误。是的。由于您没有默认的道具,也没有传递道具,this.props.groupMessage
未定义,但应为数组。您的组件需要groupMessage
prop:const messageList=this.props.groupMessage.map((groupMessage,index)
,但您没有传递任何值shall()
。因此出现错误。另外,建议您不要在每个it中初始化,而可以在每个it中使用之前使用,并在it中装载。您的意思是我应该将其传递给shall())
像这样吗?传递的值是任意值。我以前做过并传递了值,但它一直抛出错误。是的。由于您没有默认的道具,也没有传递道具,this.props.groupMessage
未定义,但应为数组。