NestJS运行e2e测试报错:无法找到模块的解决方案咨询
问题:NestJS执行e2e测试时模块找不到
运行test:e2e测试时碰到以下错误:
Cannot find module 'src/tokens/entities/tokens.entity' from '../src/token-stat/entities/token-stat.entity.ts' 1 | import { ApiProperty } from '@nestjs/swagger'; > 2 | import { Token } from 'src/tokens/entities/tokens.entity'; | ^ 3 | import { 4 | Entity, 5 | PrimaryGeneratedColumn,
当前package.json里的相关Jest配置:
{ "moduleFileExtensions": [ "js", "json", "ts" ], "moduleNameMapper": { "^src/(.*)$": "<rootDir>/$1" }, "rootDir": "./src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" }
请问该怎么修改package.json配置来解决这个问题?
解决方法
核心问题是e2e测试的Jest配置没正确映射src/路径。因为e2e测试文件一般在test/目录下,而你当前rootDir设为./src,导致Jest从e2e测试文件出发时,找不到src/开头的模块。
可以通过以下两种方式修改package.json配置:
方式1:分项目配置单元测试和e2e测试
在package.json的jest配置中添加projects字段,分别为两种测试设置适配的规则:
"jest": { "projects": [ // 单元测试配置 { "moduleFileExtensions": ["js", "json", "ts"], "rootDir": "./src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "moduleNameMapper": { "^src/(.*)$": "<rootDir>/$1" }, "collectCoverageFrom": ["**/*.(t|j)s"], "coverageDirectory": "../coverage", "testEnvironment": "node" }, // e2e测试配置 { "moduleFileExtensions": ["js", "json", "ts"], "rootDir": "./", "testRegex": ".e2e-spec.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "moduleNameMapper": { "^src/(.*)$": "<rootDir>/src/$1" }, "testEnvironment": "node" } ] }
这种方式把e2e测试的rootDir设为项目根目录,同时将src/映射到根目录下的src文件夹,确保导入路径能被正确解析。
方式2:调整现有moduleNameMapper路径(简易版)
如果不想拆分配置,可以直接修改原有的moduleNameMapper,让它同时适配两种测试的路径:
"moduleNameMapper": { "^src/(.*)$": "<rootDir>/../src/$1" }
不过这种方式可能会对单元测试的路径解析产生影响,优先推荐方式1。
内容的提问来源于stack exchange,提问作者SerbianDeveloper
相关产品推荐
相关产品推荐

