【问题标题】:How do you mock a class function in componentDidMount如何在 componentDidMount 中模拟类函数
【发布时间】:2018-11-28 21:27:05
【问题描述】:
class myClass extends React.Component {
     async componentDidMount(){
         const xyz = helperclass.queryParameters('parameter')
         // how can I mock xyz to help me change the value to test the conditional below
         if(xyz){
            // do something here
          }
     }
}

已经编辑了上面的代码,现在我想通过模拟它来测试 const xyz 到辅助函数的值,然后返回不同的东西来测试条件内的东西是否完成

【问题讨论】:

  • 它是酶,不是吗?问题没有提到这一点。另外,在一个地方是myFunctionToMock,在另一个地方是mythingtocheck
  • @estus 你什么意思对不起?
  • 您是在使用 Enzyme 来测试组件还是什么?该问题不包含您在测试中使用的代码。
  • 是的,我使用酶。我已经发布了部分测试文件。如果需要可以发布更多信息吗?

标签: javascript reactjs mocking jestjs


【解决方案1】:

由于myFunctionToMock是原型方法,所以可以模拟为

jest.spyOn(MyClass.prototype, 'myFunctionToMock').mockImplementation(...);

在类实例化之前。

Enzyme 中的另一个选项是使用disableLifecycleMethods option 禁用挂钩,在wrapper.instance() 上模拟一个方法并手动调用componentDidMount

如果一个方法不属于this,则可以在它所属的对象上模拟它:

jest.spyOn( helperclass, 'queryParameters').mockImplementation(...);

同样,这应该在类实例化之前完成,或者需要使用disableLifecycleMethods

【讨论】:

  • 我已经用.mockImplementation(() => 'mystring' 做到了,它仍然在componentDidMount 中注销为未定义??
  • 你是怎么做到的?如果您按照答案中的建议执行此操作,即在类实例化之前模拟方法,则不应发生这种情况。
  • 我完全按照您所说的做了,并在上面的.mockImpl 部分添加了内容。我已经将其注销,并且可以正确识别该功能。也许 componentDidMount 之前被调用过?
  • 看起来像是在调用它,只是没有返回任何东西?
  • 如果你做的一切都正确,它应该返回模拟值。如果没有看到全貌,我不能说你的情况出了什么问题。请注意,stackoverflow.com/help/mcve 是 SO 上代码问题的要求。
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
相关资源
最近更新 更多