You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:05:17