如何让Jest查找在组件中导入的模块?

时间:2018-08-21 11:33:29

标签: javascript jestjs enzyme

当我尝试运行npm jest时,测试套件无法运行并给出以下错误消息:

Cannot find module 'app/utils' from 'MoreModal.js'

          1 | import React from 'react';
          2 | import { Link } from 'react-router';
        > 3 | import { fn, api } from 'app/utils';

我的笑话配置是

"jest": {
        "setupTestFrameworkScriptFile": "<rootDir>/js/__tests__/setup/setupEnzyme.js",
        "testPathIgnorePatterns": ["<rootDir>/js/__tests__/setup/"],
    },

我尝试摆弄moduleDirectories,但是什么也没做。

我的酶设置是

Enzyme.configure({ adapter: new Adapter() });

测试:

describe('<MoreModal />', () => {
    describe('render()', () => {
        test('renders the component', () => {
            const wrapper = shallow(<MoreModal />);
            const component = wrapper.dive();

            expect(toJson(component)).toMatchSnapShot();
        })
    })
})

如何开玩笑以正确找到组件中的模块?

2 个答案:

答案 0 :(得分:1)

您的捆绑程序可能已设置了一些分辨率,以使app/utils像这样工作。

如果您使用的是Webpack,https://www.npmjs.com/package/jest-webpack-resolver将帮助您连接Jest以使用相同的分辨率规则。

答案 1 :(得分:1)

您可以尝试以下操作:

"jest":{
    "modulePaths": [
        "<rootDir>/app"
    ],
    "moduleDirectories": [
        "app"
    ]
}

根据Jest documentation

  

设置NODE_PATH env变量modulePaths的替代API   是指向要搜索的其他位置的绝对路径的数组   解决模块。使用字符串标记包括路径   到项目的根目录。例如:[“ / app/"]。​​

捆绑程序也有可能相对于@AKX提到的其他目录来解析模块。项目的根文件夹中或内部是否存在“ app / utils”?如果是这种情况,您的笑话配置应该与捆绑程序的配置相匹配。