发布 npm 包的模拟以供 jest 的模块模拟​​系统使用

Dan*_*ger 7 unit-testing mocking node.js reactjs jestjs

我正在发布一个(私有)npm 包,并且也想为其发布模拟。我希望 jest 的模块模拟​​系统能够拾取这些模拟

该包是一个使用上下文并发出网络请求的反应库。该库的所有功能都是独立的并且经过充分测试。我希望消费者能够将其视为测试中的黑匣子,相信它能按预期工作。因此,我想发布它的模拟版本以进行测试。


// The real component
const ComplicatedComponent = props => {
  // Access context here
  return <div> Something based on context <div/>
}

// The mocked component

const ComplicatedComponent = props => <>ComplicatedComponent</>

Run Code Online (Sandbox Code Playgroud)

在完美的世界中,消费者只需调用

jest.mock('my-library');
Run Code Online (Sandbox Code Playgroud)

据我所知这是不可能开箱即用的。这似乎意味着由消费者来编写模拟:

如果您正在模拟的模块是 Node 模块(例如:lodash),则模拟应放置在与 node_modules 相邻的模拟目录中

任何人都可以建议一种好方法来发布模拟,供笑话使用我的库吗?

els*_*gav 1

重新发布@Sean22 的评论作为答案:

我终于弄清楚如何做到这一点。我将需要模拟的模块包含在我的 npm 模块中的常规 __ mock __ 子目录中。然后,在导入模块的代码中,jest.mock('<npm_module>/path/to/mocked/code') 将使用该 npm 模块代码的模拟版本

因此,请确保您的__mocks__/custom-mock.js包包含在包的构建中,并且使用的应用程序将能够使用它