Replit环境下使用Jest时,如何在测试文件中导入主JavaScript文件的类与常量
Replit环境下使用Jest时,如何在测试文件中导入主JavaScript文件的类与常量
别着急!你遇到的其实是Node.js模块系统(CommonJS 和 ES 模块)不兼容的问题,在Replit里很容易解决,给你两种方案任选:
方案一:沿用CommonJS风格(最省心,适配原有测试代码)
既然原来的sum能通过require正常导入,说明你的Replit环境默认是CommonJS模块模式,那只需要把你自己的类和常量也用CommonJS的方式导出即可:
修改主文件
sut.js,添加正确的导出
在文件末尾把需要测试的变量、类都加入module.exports:// sut.js 示例 // 假设你原来的sum函数是这样的 function sum(a, b) { return a + b; } // 你的自定义常量和类 const x = 10; const y = 20; class MyCustomClass { constructor(name) { this.name = name; } } // 导出所有需要在测试中使用的内容 module.exports = { sum, x, y, MyCustomClass };在测试文件
sut.test.js中导入
继续用require语法,把需要的内容解构出来:const { sum, x, y, MyCustomClass } = require('./sut'); // 接下来就可以正常写测试了,比如: test('测试常量x的值', () => { expect(x).toBe(10); }); test('测试自定义类', () => { const instance = new MyCustomClass('test'); expect(instance.name).toBe('test'); });
方案二:切换到ES模块(使用import/export语法)
如果你更习惯ES模块的import/export语法,需要先配置项目启用ES模块:
创建/修改
package.json文件
在项目根目录新建一个package.json(如果还没有的话),添加"type": "module"字段,告诉Node.js这是一个ES模块项目:{ "type": "module" }修改主文件
sut.js为ES导出
把原来的导出改成ES模块的语法:// sut.js 示例 export function sum(a, b) { return a + b; } export const x = 10; export const y = 20; export class MyCustomClass { constructor(name) { this.name = name; } }在测试文件
sut.test.js中使用import导入
注意导入路径要加上.js后缀(ES模块要求必须写全后缀):import { sum, x, y, MyCustomClass } from './sut.js'; // 正常编写测试用例即可 test('sum函数正常工作', () => { expect(sum(1,2)).toBe(3); });如果Jest运行时出现报错,可能需要在
package.json里添加Jest的配置,关闭默认的转译(因为Replit的Node.js版本通常已经支持ES模块):{ "type": "module", "jest": { "transform": {} } }
两种方案都能解决你复制粘贴代码的麻烦,第一种不用改太多配置,适合快速解决问题;第二种更符合现代JS的写法,看你个人习惯啦~
备注:内容来源于stack exchange,提问作者Doraemon
相关产品推荐
相关产品推荐

