我正在尝试遵循https://stackoverflow.com/a/53726116/9899193,但是使用ES6 Modules和Babel。我的根文件夹有两个javascript文件sumfn.js
和sum.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可能不支持此功能吗?
答案 0 :(得分:0)
您需要添加./
来告诉JavaScript 要查找的模块可以在以下文件路径(相对于当前文件)中找到。因此您需要添加./
说在当前目录中寻找sumfn.js
。
答案 1 :(得分:0)
所以我感到困惑的主要原因之一是因为那里有很多过时的ES6模块指南。实际上,Google的许多顶级搜索结果似乎已经过时了。我正在查看this,this和this之类的指南,他们都说您可以从模块名称导入,而无需指定路径,例如
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)。让每个环境以不同的方式解析这些说明符似乎很危险,这可能会使制作相互兼容的模块变得困难,但是我想这是目前的计划。