最后,我将组件从React.createClass()更新为ES6类。我在测试中看到的第一个错误是我的某些sinon.stub()调用失败了,因为jscodeshift -t react-codemod/transforms/class.js转换了我的组件方法以使用属性初始化程序提议,即

class Foo extends React.Component {
  componentWillMount() {
    this.fetchSomeData(this.props);
  }
  componentWillReceiveProps(nextProps) {
    if (nextProps.someProp !== this.props.someProp) {
      this.fetchSomeData(nextProps);
    }
  }
  fetchSomeData = (props) => {
    ...
  };
  render() {
    ...
  }
}


我的问题是:如何使用这种新语法对fetchSomeData()进行存根处理?我的测试看起来像sinon.stub(Foo.prototype, 'fetchSomeData');不再起作用,这是因为fetchSomeData不在原型中。

谢谢!

最佳答案

在此示例中,实际上fetchSomeData()确实附加了this而不是Foo.prototype,因此在创建实例之前绝对没有方法对方法进行存根。解决方法是将fetchSomeData()中的逻辑移动到可以存根的其他位置。或使用其他语法定义方法。

09-19 04:46