【问题标题】:Publishing mocks for an npm package to be used by jest's module mocking system为 jest 的模块模拟​​系统使用的 npm 包发布模拟
【发布时间】:2019-10-18 00:12:44
【问题描述】:

我正在发布一个(私有)npm 包,并希望为它发布模拟。我希望这些嘲笑被 jest 的module mocking system.

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


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

// The mocked component

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

在一个完美的世界中,消费者可以简单地调用

jest.mock('my-library');

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

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

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

【问题讨论】:

  • 我正在尝试自己解决这个问题 - 您是否有运气找到解决方案?
  • 我不记得了,但我认为最好的方法是将模拟作为导出,而不是在设置中手动模拟它。
  • 布勒? ……布勒? ……布勒? ...
  • 我终于弄清楚了如何做到这一点。我在我的 npm 模块中的常规 __ mock __ 子目录中包含了需要模拟的模块。然后,在导入模块的代码中,jest.mock('&lt;npm_module&gt;/path/to/mocked/code') 将使用该 npm 模块代码的模拟版本。

标签: node.js reactjs unit-testing mocking jestjs


【解决方案1】:

转发this comment from @Sean22作为答案:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-08
    • 2019-08-17
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2017-02-23
    • 2018-01-26
    相关资源
    最近更新 更多