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

NestJS e2e测试报错:无法解析UsersService的JwtService依赖

NestJS E2E测试依赖解析错误排查与解决

问题概述

编写NestJS登录接口的E2E测试时,出现依赖解析错误,无法解析UsersService的JwtService依赖。

报错信息

Nest can't resolve dependencies of the UsersService (UsersModel, ?). Please make sure that the argument JwtService at index [1] is available in the UsersModule context.

问题根源

  1. 测试代码使用未初始化变量:测试中overrideProvider(UsersService).useValue(usersService)的usersService仅声明未赋值,传入undefined导致Nest无法构建合法服务实例。
  2. UsersModule缺失JwtModule导入:UsersService依赖JwtService,但UsersModule未导入并配置JwtModule,导致Nest在任何上下文(包括测试)中无法解析该依赖。

解决方案

方案1:补全UsersModule的JwtModule配置

检查并修改UsersModule,确保已导入并配置JwtModule,示例代码如下:

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { JwtModule } from '@nestjs/jwt';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { Users, UserSchema } from 'src/schemas/user.schema';

@Module({
  imports: [
    MongooseModule.forFeature([{ name: Users.name, schema: UserSchema }]),
    // 配置JwtModule,密钥建议从环境变量读取
    JwtModule.register({
      secret: process.env.JWT_SECRET || 'your-default-secret',
      signOptions: { expiresIn: '1h' },
    }),
  ],
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}

方案2:修正测试中的服务Mock逻辑

若需要MockUsersService,需先创建合法的Mock对象再传入,修改测试的beforeEach部分:

beforeEach(async () => {
  // 创建UsersService的Mock实现,覆盖测试用到的方法
  const mockUsersService = {
    createUser: jest.fn().mockResolvedValue(true),
  };

  const moduleRef = await Test.createTestingModule({
    imports: [UsersModule],
  })
    .overrideProvider(UsersService)
    .useValue(mockUsersService)
    .compile();

  app = moduleRef.createNestApplication();
  await app.init();
});

方案3:单独Mock JwtService避免真实依赖

若要使用真实UsersService但不想依赖真实JWT服务,可单独MockJwtService:

beforeEach(async () => {
  const mockJwtService = {
    sign: jest.fn().mockReturnValue('mock-jwt-token'),
  };

  const moduleRef = await Test.createTestingModule({
    imports: [UsersModule],
  })
    .overrideProvider(JwtService)
    .useValue(mockJwtService)
    .compile();

  app = moduleRef.createNestApplication();
  await app.init();
});

内容的提问来源于stack exchange,提问作者Mustafa UYSAL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:43:23