NestJS E2E测试报错:无法找到控制器中引入的模块
NestJS E2E测试模块找不到问题的解决方法
运行Category模块的E2E测试时,出现模块找不到错误:
FAIL test/category.e2e-spec.ts ● Test suite failed to run Cannot find module 'src/auth/jwt-auth-unprotected.guard' from '../src/category/category.controller.ts' Require stack: C:/Users/losak/OneDrive/Desktop/back.zumzak/src/category/category.controller.ts C:/Users/losak/OneDrive/Desktop/back.zumzak/src/category/category.module.ts category.e2e-spec.ts 13 | } from '@nestjs/common'; 14 | import { Request } from 'express'; > 15 | import { JwtAuthUnprotectedGuard } from 'src/auth/jwt-auth-unprotected.guard'; | ^ 16 | import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; 17 | import { CategoryService } from './category.service'; 18 | import { CreateCategoryDto } from './dto/create-category.dto'; at Resolver._throwModNotFoundError (../node_modules/.pnpm/jest-resolve@28.1.3/node_modules/jest-resolve/build/resolver.js:491:11) at Object.<anonymous> (../src/category/category.controller.ts:15:1)
用户相关代码如下:
测试文件 category.e2e-spec.ts
import { Test } from '@nestjs/testing'; import { CategoryModule } from '../src/category/category.module'; import * as request from 'supertest'; describe('CategoryController (e2e)', () => { let app: INestApplication; beforeAll(async () => { const moduleFixture = await Test.createTestingModule({ imports: [CategoryModule], }).compile(); app = moduleFixture.createNestApplication(); await app.init(); }); it('/ (GET)', () => { return request(app.getHttpServer()) .get('/category') .expect(200) }); });
模块文件 category.module.ts
import { Module } from '@nestjs/common'; import { CategoryController } from './category.controller'; import { ShopModule } from 'src/shop/shop.module'; import { FileService } from 'src/file/file.service'; import { PrismaService } from 'src/prisma.service'; import { CategoryService } from './category.service'; @Module({ imports: [ShopModule], controllers: [CategoryController], providers: [CategoryService, PrismaService, FileService], }) export class CategoryModule {}
控制器导入部分 category.controller.ts
import { Request } from 'express'; import { JwtAuthUnprotectedGuard } from 'src/auth/jwt-auth-unprotected.guard'; import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; import { CategoryService } from './category.service'; import { CreateCategoryDto } from './dto/create-category.dto'; import { ParamsCategoryDto } from './dto/params-category.dto'; import { ParamsSearchDto } from './dto/params-search.dto'; import { UpdateCategoryDto } from './dto/update-category.dto';
解决步骤
步骤1:确认TypeScript路径配置
检查项目根目录的tsconfig.json,确保已配置baseUrl和paths,让TypeScript识别src/开头的绝对路径:{ "compilerOptions": { "baseUrl": "./", "paths": { "src/*": ["src/*"] } // 其他配置项... } }步骤2:配置Jest的模块映射
Jest默认不识别TypeScript的路径别名,需在E2E测试配置文件(通常为jest-e2e.json)中添加moduleNameMapper:{ "moduleFileExtensions": ["js", "json", "ts"], "rootDir": ".", "testEnvironment": "node", "testRegex": ".e2e-spec.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "moduleNameMapper": { "^src/(.*)$": "<rootDir>/src/$1" } }步骤3:验证文件存在性与文件名
确认src/auth/jwt-auth-unprotected.guard.ts文件真实存在,且文件名大小写与导入语句完全匹配(部分环境下Jest对文件名大小写敏感)。步骤4:检查模块依赖
确认CategoryModule是否正确导入了AuthModule;若测试需要隔离依赖,可在测试模块中手动提供JwtAuthUnprotectedGuard的替代实现。
内容的提问来源于stack exchange,提问作者SPR1NG
相关产品推荐
相关产品推荐

