酶调用方法

Kou*_*sha 5 javascript reactjs enzyme

假设我的React组件中有一个方法:

doSomething() {
    // method uses this.props and this.state
}
Run Code Online (Sandbox Code Playgroud)

我想针对不同的道具和设置状态测试此方法.那我该怎么称呼呢?MyClass.prototype.doSomething将调用该函数,但然后this.props并且this.state未设置.

小智 20

您可以使用酶的instance函数来获取渲染组件的实例,并在其上调用方法.

const wrapper = shallow(<MyClass {...props} />) wrapper.instance().doSomething()

  • 是的,这有效。请记住,当您之后检查状态时,您应该检查“wrapper”,而不是“wrapper.instance()”。 (2认同)

Mat*_*bst -6

注意:下面@Tyler的答案是更好的解决方案

您可以只使用您想要使用apply的值:this

// MyClass.prototype.doSomething() becomes

var mockThis = { 
  props: { coolProp: 'coolValue1' }, 
  state: { coolStateKey: 'coolValue2' }
};
MyClass.prototype.doSomething.apply(mockThis);` 
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个真正合适的解决方案。`MyClass` 现在永远脏了;未来对它的调用将有模拟集。 (2认同)