使用Jest进行测试:解构分配不起作用

问题描述

我正在尝试使用Jest和Enzyme测试反应组件。我的componentDidMount方法/功能

Real.jsx

// some code

class MyComponent extends React.Component {


    componentDidMount() {
      setTimeout (() => {
        const { formVals : { eName,eSal },changeVal } = this.props
        console.log("changeVal function" + changeVal)
        changeVal(someparam,someparam2)
      },1000)
    }

// some more functions 

}

export default MyComponent

我的测试代码如下

import MyComponent from '../../components/Real' //Real.jsx

    jest.usefaketimers();
    test('test componentDidMount',() => {
      var props = {
        formVals: {
          eName: 123,eSal: 10000
        },changeVal: (x,y) => console.log(x)
      }
    
      var component = shallow <MyComponent {...props}/>
      jest.runAllTimers(); // getting coverage for setTimeOut
      component.update();  // getting coverage for setTimeOut
    }) 

但是我将changeVal的值定义为undefined,这意味着解构分配无法正常工作。

请帮助解决这种情况下的问题。

解决方法

你在这里。

 [DataContract]
    public class WrAsignChkModel
    {
        [DataMember]
        public string Arg1 { get; set; }
        [DataMember]
        public string Arg2 { get; set; }
        [DataMember]
        public string Arg3 { get; set; }
        [DataMember]
        public string Arg4 { get; set; }
    }

    [DataContract]
    public class WrAsignChkResponse
    {
        [DataMember]
        public int ResponseCode { get; set; }
        [DataMember]
        public string Message { get; set; }
        [DataMember]
        public string RequestStatus { get; set; }
        [DataMember]
        public string RequestTimeStamp { get; set; }
    }
,

尝试一下。

const { formVals { eName,eSal },changeVal } = this.props
,

更改const { formVals,changeVal } = this.props; const { eName,eSal } = formVals;

const { formVals: { eName,changeVal } = this.props

;

更新:尝试重现带有代码段的问题。 唯一的变化是我必须删除console.log结尾的var props = { formVals: { eName: 123,eSal: 10000,},changeVal: (x,y) => console.log(x) }; const { formVals: { eName,changeVal,} = props; changeVal("print this","hello");以避免错误。

rollingMode: {
    follow: true,offset: 0.5
}

timeline.setCurrentTime(30 seconds ago)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...