使用Jest +酶在React组件中导入的模拟节点模块

时间:2018-11-06 15:40:24

标签: reactjs jestjs enzyme

我正在尝试使用Jest和Enzyme测试React组件,但是我的测试无法运行,因为它似乎在使用特定的节点模块时遇到了麻烦。实际上,破坏测试的模块是从我要测试的组件中导入的组件导入的。

以下是层次结构:

  • 见解
    • BuildOnScrollHelper(这是导入节点模块的地方)。

我运行此测试时:

import React from 'react';
import { shallow } from 'enzyme';
import { View } from 'react-native';
import { Insights } from '../../containers/Insights';
import insightsMockData from '../../mocks/data/insights';

describe('Insights Container', () => {
  let cmp;

  beforeEach(() => {
    cmp = shallow(
      <Insights
        {...insightsMockData}
        loadReports={jest.fn()}
        fetchGraph={jest.fn()}
      />,
    );
  });

  it('does stuff', () => {
    console.log(cmp.debug());
  });
});

我从控制台的Jest收到此错误:

enter image description here

如果我进入 Insights React组件并注释掉 BuildOnScrollHelper 组件(及其导入语句),则测试运行良好。

我有两个想法:

  1. 我什至不需要模拟节点模块,也许我可以模拟 BuildOnScrollHelper 本身?对于此测试,我根本不关心 BuildOnScrollHelpers 功能。
  2. 我将不得不模拟节点模块。

有人知道我会以一种被认为是好的做法来解决这个问题吗?我花了几个小时试图寻找解决方案,但仍然无法使我的测试正常工作。

理想情况下,我想要一个提供一些代码示例的答案,而不仅仅是一个文档的链接。

1 个答案:

答案 0 :(得分:0)

检查此link

  

模拟节点模块

     

如果您要模拟的模块是Node模块(例如lodash),则   模拟应放置在与之相邻的 mocks 目录中   node_modules(除非您将根配置为指向其他文件夹   比项目根目录),并会被自动模拟。没有啦   需要显式调用jest.mock('module_name')。

     

可以通过在目录中创建文件来模拟作用域模块   与作用域模块名称匹配的结构。例如,   模拟一个称为@ scope / project-name的作用域模块,在以下位置创建文件   模拟 / @ scope / project-name.js,相应地创建@ scope /目录。