Jest / Babel无法找到没有路径前缀的模块

时间:2019-04-14 08:31:01

标签: javascript jestjs es6-modules babel-jest

我正在尝试遵循https://stackoverflow.com/a/53726116/9899193,但是使用ES6 Modules和Babel。我的根文件夹有两个javascript文件sumfn.jssum.test.js。我的sum.test.js文件如下所示:

import { sum } from 'sumfn';

test('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
});

尽管Jest显然确实找到了文件sumfn,但Jest似乎无法解决sunfn.js

  ● Test suite failed to run

    Cannot find module 'sumfn' from 'sum.test.js'

    However, Jest was able to find:
        './sumfn.js'

    You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'json', 'jsx', 'ts', 'tsx', 'node'].

如果我将导入行更改为使用./sumfn,它将起作用。但是,从我阅读的有关ES6导入的内容来看,似乎它应该能够在同一目录中找到文件。 Jest可能不支持此功能吗?

2 个答案:

答案 0 :(得分:0)

您需要添加./来告诉JavaScript 要查找的模块可以在以下文件路径(相对于当前文件)中找到。因此您需要添加./在当前目录中寻找sumfn.js

答案 1 :(得分:0)

所以我感到困惑的主要原因之一是因为那里有很多过时的ES6模块指南。实际上,Google的许多顶级搜索结果似乎已经过时了。我正在查看thisthisthis之类的指南,他们都说您可以从模块名称导入,而无需指定路径,例如

import { double } from 'mymodule';

这些被称为"bare" import specifiers,并且指南说默认情况下它将在当前目录中搜索匹配的模块。但是,现在看来他们是not supported in browsers

最令人困惑的地方是BabelJS和Webpack支持它们 ,但是遵循不同的约定。例如,Webpack搜索paths specified in resolve.modules,默认情况下包含node_modules文件夹。这就是Create-React-App example可以使用类似

的语句的原因
import React from 'react';

看来,未来的计划是让环境确定如何解决这些“裸露的”说明符(Source)。让每个环境以不同的方式解析这些说明符似乎很危险,这可能会使制作相互兼容的模块变得困难,但是我想这是目前的计划。