Reactjs 在酶中如何调用外部函数?

Reactjs 在酶中如何调用外部函数?,reactjs,unit-testing,enzyme,Reactjs,Unit Testing,Enzyme,我有一个带有外部函数的标准react组件,我正在调用这些函数,或者想检查它们是否已被调用 我知道我可以为类函数做wrapper.instance().funcName(),但是如果我已经导入了一个外部函数,或者是作为道具,或者是直接导入,我该怎么做 基本上我怎么做下面的 class component extends React.Component{ localMethod = () => { externalMethod() } } expect(externa

我有一个带有外部函数的标准react组件,我正在调用这些函数,或者想检查它们是否已被调用

我知道我可以为类函数做
wrapper.instance().funcName()
,但是如果我已经导入了一个外部函数,或者是作为道具,或者是直接导入,我该怎么做

基本上我怎么做下面的

class component extends React.Component{

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

expect(externalMethod).toHaveBeenCalled()

这将是您的组件,它将很容易(但您的组件似乎不是!对不起):
您的MyComponent依赖于此外部方法。
为了便于测试,您的组件应该允许注入此依赖项
这允许您的测试为此方法提供间谍

您的测试代码:(如下所示)


“我有一个带有外部函数的标准react组件,我正在调用这些函数,或者想检查它们是否已被调用”说到单元测试。您不想在测试中调用外部函数,因为您测试的是组件而不是函数。此外,您不想检查组件是否调用了它私下导入的某些外部函数,因为它是实现细节,而不是要在单元测试中测试的组件API的一部分。但是,如果您需要检查此实现细节,您可以按照@YuryTarabanko的说明进行操作,这样就不会真正完成此类操作了?甚至连redux的道具都没有?我不知道如何测试我的东西,那么“甚至连redux的道具都没有?”如果你通过回调传递一个属性,你总是可以传递一个存根(google for
sinon
),并检查它是否真的被调用。“这样的事情还没有真正完成吗?”可以完成(检查我上面链接的答案)。但是,您导入的仪表工作量有点烦人。此外,那些依赖于实现细节的测试很可能会中断。
// 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()
   }
   ...
}