运行NestJS项目Jest测试套件时提示找不到rxjs模块
NestJS Jest测试报rxjs模块找不到问题解决
问题现象
- 编写NestJS Provider对应的*.spec.ts测试文件时,
beforeAll钩子可正常执行,运行it.todo()方法时抛出模块解析错误 - package.json的dependencies字段已声明
rxjs@^7.2.0依赖,该依赖为Nest项目初始化时自带的默认依赖,未手动执行过rxjs重装操作
报错信息
Cannot find module 'rxjs' from 'node_modules/@nestjs/common/cache/interceptors/cache.interceptor.js' Require stack: node_modules/@nestjs/common/cache/interceptors/cache.interceptor.js node_modules/@nestjs/common/cache/interceptors/index.js node_modules/@nestjs/common/cache/index.js node_modules/@nestjs/common/index.js node_modules/@nestjs/testing/testing-module.builder.js node_modules/@nestjs/testing/test.js node_modules/@nestjs/testing/index.js src/bookmark/test/integration/bkm.service.int-spec.ts at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:491:11) at Object.<anonymous> (node_modules/@nestjs/common/cache/interceptors/cache.interceptor.js:5:16)
对应测试文件代码
describe('BookmarkService Integration', () => { let prisma: PrismaService; let bookmarkService: BookmarkService beforeAll(async () => { const moduleRef = await Test.createTestingModule({ imports: [AppModule], }).compile(); prisma = moduleRef.get(PrismaService); bookmarkService = moduleRef.get(BookmarkService); await prisma.cleanDatabase(); }); it.todo('Default test pass') })
解决步骤
- 首先执行
npm install补全依赖,无需担心重复安装的影响:npm会自动校验node_modules中已存在的包,仅补全缺失的依赖项,不会破坏现有正常的依赖结构。该问题大概率是安装依赖时网络波动、缓存异常导致rxjs包实际未被正确写入node_modules目录,或包内文件损坏。 - 若执行
npm install后问题未解决,删除项目根目录下的node_modules文件夹和package-lock.json文件,重新执行npm install做全量依赖重装,可解决绝大多数依赖软链接断裂、版本不匹配、文件缺失的问题。 - 重装依赖后仍报错的,检查jest配置文件中的
moduleDirectories字段,确保配置包含node_modules,避免jest解析第三方依赖时跳过node_modules查找路径,标准配置如下:
// jest.config.js module.exports = { // 其余jest配置 moduleDirectories: ['node_modules', '<rootDir>/src'], }
- 最后可执行
npm ls rxjs命令,查看当前项目依赖树中rxjs的实际安装位置和版本,确认包确实被正确安装,同时排查是否存在路径映射、模块别名配置导致jest将rxjs解析到错误路径。
内容的提问来源于stack exchange,提问作者MetalGeek7
相关产品推荐
相关产品推荐

