【问题标题】:How do you call an external function in enzyme?您如何称呼酶中的外部功能?
【发布时间】:2018-11-29 19:28:30
【问题描述】:

我有一个标准的反应组件,其中包含我正在调用或想要检查它们是否已被调用的外部函数

我知道我可以为类函数做wrapper.instance().funcName(),但我说我已经导入了一个外部函数,无论是作为道具还是直接导入,我该怎么做?

基本上我该怎么做下面的???

class component extends React.Component{

   localMethod = () => {
     externalMethod()
   }
}

expect(externalMethod).toHaveBeenCalled()

【问题讨论】:

  • “我有一个带有外部函数的标准反应组件,我正在调用或想要检查它们是否已被调用”谈到单元测试。您真的不想在测试中调用外部函数,因为您正在测试组件而不是函数。此外,您不想检查组件是否调用了它私下导入的某些外部函数,因为它是实现细节而不是要在单元测试中测试的组件 API 的一部分。
  • 但是如果你需要检查这个实现细节,你可以按照answer
  • @YuryTarabanko 所以这种事情还没有真正完成?甚至没有来自 redux 的道具?不知道我该如何测试我的东西
  • "甚至没有来自 redux 的道具?"如果你传递一个回调属性,你总是可以传递一个存根(google for sinon)并检查它是否被实际调用。
  • “所以这种事情还没有真正完成?”它可以完成(检查我上面链接的答案)。但是你导入的仪器工作量有点烦人。那些依赖于实现细节的测试也很容易被打破。

标签: reactjs unit-testing enzyme


【解决方案1】:

这将是您的组件,这很容易(但您似乎不是!抱歉):
您的 MyComponent 依赖这个 externalMethod。
所以为了便于测试,你的组件应该允许注入这个依赖
这允许您的测试为此方法提供间谍。

你的测试代码:(在Arrange Act Assert Pattern之后)

// Arrange: create a jest spy
const externalMethodSpy = jest.fn();

wrapper = shallow(<MyComponent externalMethod={externalMethodSpy} />);
// Act on your wrapper ...

// Assert the result
expect(externalMethodSpy).toHaveBeenCalled();

您的生产代码:

class MyComponent extends React.Component{
   localMethod = () => {
     this.props.externalMethod()
   }
   ...
}

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 2020-09-14
    • 1970-01-01
    • 2021-05-25
    • 2019-01-16
    • 2020-09-21
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多