如何开玩笑地模拟文件夹中的所有文件
Posted
技术标签:
【中文标题】如何开玩笑地模拟文件夹中的所有文件【英文标题】: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');
【问题讨论】:
我发布了一个答案。看看吧 【参考方案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 旨在模拟模块而不是包含模块的目录。
【讨论】:
任何可以证实这一点的链接,因为根据我的经验,它是相同的。我们需要设置的任何笑话配置都会自动发生。以上是关于如何开玩笑地模拟文件夹中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章