我在带有Rollup的项目中使用普通javascript。我正在使用,并且是第一次安装Jest,在对我的问题进行了一些研究之后,我有了一个基本的设置:
// jest.config.js
module.exports = {
coverageDirectory: 'coverage',
moduleFileExtensions: ['js'],
moduleNameMapper: {
'^applicationRoot/(.*)$': '<rootDir>/src/$1',
},
};
我正在使用 rollup-plugin-alias 库,这是我的 rollup.config.js
中的示例// rollup.config.js
// ...
alias({
resolve: ['.js'],
applicationRoot: __dirname + '/src',
entries: [
{
find: 'global/http',
replacement: `${__dirname}/src/global/http/index.js`,
},
]})
我的图书馆中的所有类都位于 ./ src目录中。如果在我的输入文件( ./ src / index.js )中,则有以下几行:
// ./src/index.js
import Http from 'global/http';
export class MyClass {
}
在我的测试文件中,我有:
// ./src/index.spec.js
import { MyClass } from './index';
在终端中,出现以下错误:
● Test suite failed to run
Cannot find module 'global/http' from 'src/index.js'
Require stack:
src/index.js
src/index.spec.js
> 1 | import Http from 'global/http';
我还应该做什么?感谢您的帮助或评论。
[已编辑]
我创建了一个虚拟存储库,其结构与上述类似:
https://github.com/luenmuvel/dummy-project-rollup-jest-issues
在这种情况下,他们要做的就是克隆项目并运行“ npm i ”或“ 纱线”。
在浏览器中它确实起作用: 您只需要运行:
开玩笑不起作用。 您只需要运行: -“ npm运行t ”或“ 纱线t ” -等待输出。
答案 0 :(得分:0)
据我所知,问题是在您的.spec
文件中,您导入的是原始文件,而不是已编译的文件。>
已编译文件是一个汇总输出,具体取决于您的输出选项。例如,这是您的配置方式:
output: {
file: "dist/bundle.js",
format: "umd",
name: "testing",
},
构建的文件位于dist/bundle.js
,但是在您的.spec
文件中您是这样导入的:
import MyClass from "./index";
不仅如此,您还使用了一些插件,这些插件会影响最终输出。
不确定此比较是否正确,但是就像您要从TS
文件导入JS
文件一样。您可能犯的错误几乎是相同的。
还请注意,index
没有没有默认导出:
export class MyClass { }
我想出的解决方案是使用玩笑的moduleNameMapper
option将index.js
映射到汇总将输出的文件:
// jest.config.js
module.exports = {
coverageDirectory: "coverage",
moduleFileExtensions: ["js"],
moduleNameMapper: {
"^applicationRoot/(.*)$": "<rootDir>/src/$1",
},
moduleNameMapper: {
"./index.js": "../dest/bundle.js"
}
};
spec
文件将这样导入文件:
import { MyClass } from './index.js';