Jest : 模拟导入 JSON 文件
Posted
技术标签:
【中文标题】Jest : 模拟导入 JSON 文件【英文标题】:Jest : Mock import of JSON file 【发布时间】:2017-08-16 14:57:36 【问题描述】:我目前正在测试我的一个 React 组件,如下所示:
it('renders correctly', () =>
const tree = renderer.create(<Scene ...props />).toJSON();
expect(tree).toMatchSnapshot();
);
我的组件Scene
导入了一个setting.json
文件。我在我的本地实例上有那个文件,但我没有将它推送到我的 CI 实例上。因此,当它尝试导入它时,找不到该文件。
有没有办法在我的测试中模拟这个文件?
【问题讨论】:
我认为你必须为它创建一个手动模拟。 【参考方案1】:您可以在开玩笑设置中使用moduleNameMapper
将导入指向模拟的 json 文件。
"moduleNameMapper":
"setting.json": "<rootDir>/__mocks__/setting.json"
或者您可以在测试中使用jest.mock
直接模拟文件,注意您必须添加 virtual: true
参数。
jest.mock('path/to/setting.json', ()=>(
settings: 'someSetting'
), virtual: true )
【讨论】:
我尝试了 jest.mock 方法,但收到以下错误Cannot find module 'path/to/setting.json' from 'get.test.js'
请注意路径是相对于测试文件的。
我想模拟一个实际上并不存在的“虚拟”文件。为此,需要选项 virtual: true
。示例:jest.mock('path/to/file, () => ( foo: 'bar'), virtual: true )
。谢谢@andreas-köberle
更新了你的发现的答案
我完成了这项工作,以便为测试文件中的所有测试提供一个共享模拟。但是如何为测试文件中的每个测试用例配置不同的模拟呢?【参考方案2】:
对于那些希望以Array
的形式模拟 JSON 的人,只需从回调中返回一个数组。
jest.mock('./data.json', () => ([1, 2, 3]));
您也可以返回其他有效的 JSON 类型:Object
、String
、Number
、Boolean
或 Null
。
【讨论】:
以上是关于Jest : 模拟导入 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章
jest.mock():如何使用工厂参数模拟 ES6 类默认导入
我可以将 Jest Mocks 放在不同的文件中并将其导入我的测试文件吗?