【问题标题】:Jest : Mock import of JSON fileJest : 模拟导入 JSON 文件
【发布时间】:2017-08-16 14:57:36
【问题描述】:

我目前正在测试我的一个 React 组件,如下所示:

it('renders correctly', () => {
  const tree = renderer.create(<Scene {...props} />).toJSON();
  expect(tree).toMatchSnapshot();
});

我的组件Scene 导入了一个setting.json 文件。我在我的本地实例上有那个文件,但我没有将它推送到我的 CI 实例上。因此,当它尝试导入它时,找不到该文件。

有没有办法在我的测试中模拟这个文件?

【问题讨论】:

  • 我认为你必须为它创建一个手动模拟。

标签: unit-testing react-native jestjs


【解决方案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, () =&gt; ({ foo: 'bar'}), { virtual: true })。谢谢@andreas-köberle
  • 更新了你的发现的答案
  • 我完成了这项工作,以便为测试文件中的所有测试提供一个共享模拟。但是如何为测试文件中的每个测试用例配置不同的模拟呢?
【解决方案2】:

对于那些希望以Array 的形式模拟 JSON 的人,只需从回调中返回一个数组。

jest.mock('./data.json', () => ([1, 2, 3]));

您也可以返回其他有效的 JSON 类型:ObjectStringNumberBooleanNull

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2019-09-19
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多