【问题标题】:How to mock all files in a folder in jest如何开玩笑地模拟文件夹中的所有文件
【发布时间】:2021-10-14 23:03:47
【问题描述】:

我有如下文件

widgets
|
 --tabs
    |
     -- __mocks_
        |
         -- index.ts
     -- index.ts
 --button
    |
     -- __mocks_
        |
         -- index.ts
     -- index.ts

它作为文件导入/使用

import { Button } from 'common/widgets/button';

我可以单独模拟其中的每一个。

jest.mock('common/widgets/tabs');
jest.mock('common/widgets/button');

但是有没有办法模拟它们,比如将所有这些添加到文件中并导入它们,或者像下面这样使用一个通用的模拟文件夹和一个索引文件。

jest.mock('common/widgets');

【问题讨论】:

  • 我发布了一个答案。看看吧

标签: javascript reactjs jestjs


【解决方案1】:

你可以这样做(P.S.所有函数和函数调用只是为了演示:

文件夹结构

小部件/按钮/index.js

// demonstration
const someFunction = () => {
  console.log("widgets/button")
}

export default someFunction;

小部件/标签/index.js

// demonstration
const someFunction = () => {
  console.log("widgets/tabs")
}

export default someFunction;

小部件/index.js

export { default as Button } from './button/index';
export { default as Tabs } from './tabs/index';

-- 用法 您可以在任何文件中将函数导入为命名导入。例如。: /any/file.js

import { Button, Tabs } from 'common/widgets'
...

因此,您应该能够将它们导入到单个模拟文件中。

模拟/index.js

jest.mock('common/widgets');

【讨论】:

  • 如果这能解决您的问题,请告诉我。 (✓ + ^)
  • 感谢您的解决方案。我知道这一点。我不能将所有这些导入到同一个文件中,因为它们可能是相互依赖的。有没有其他办法
  • 您可以使用 Enyzme,正如 [quora.com/… 所说,您仍然可以使用 Enzyme 提供的 mount 功能,该功能将安装页面及其所有嵌套组件,然后您可以执行任何您希望在测试中操作页面的预期操作
【解决方案2】:

当我们在测试文件中导入任何模块时,jest 会检查 ./__mocks__ 目录中是否存在该模块的模拟实现。如果 jest 找到它,那么 jest 将简单地模拟该模块。

在您的情况下,您的 ./__mocks__ 目录中已经有模拟模块。 您不需要 jest.mock() api 来模拟您的模块。

Jest mock 旨在模拟模块而不是包含模块的目录。

【讨论】:

  • 任何可以证实这一点的链接,因为根据我的经验,它是相同的。我们需要设置的任何笑话配置都会自动发生。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
相关资源
最近更新 更多