我将 NestJS 与添加到车辆控制器的 RolesGuard 一起使用,但是当我对车辆控制器进行单元测试时,我遇到了关于 jwt 策略的依赖性错误

I use NestJS with RolesGuard added to a vehicle controller, however I get a dependency error on jwt strategy when I unit test the vehicle controller

JwtStrategy

import { Injectable, Logger, UnauthorizedException } from '@nestjs/common'
import { PassportStrategy } from '@nestjs/passport'
import { ConfigService } from '@nestjs/config'

import { Request } from 'express'
import { ExtractJwt, Strategy } from 'passport-jwt'
import { AuthService } from '../auth.service'

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
  private readonly logger = new Logger(JwtStrategy.name)

  constructor(private authService: AuthService, private readonly configService: ConfigService) {
    super({
      ignoreExpiration: false,
      secretOrKey: configService.get('JWT_SECRET'),
     
      jwtFromRequest: ExtractJwt.fromExtractors([
        (request: Request) => {
          const data = request?.cookies['authCookie']
          if (!data) {
            return null
          }
          return data.accessToken
        },
      ]),
    })
    this.logger
  }

  async validate(payload: any) {
   // the validation code
}

AuthModule

import { Module } from '@nestjs/common'
import { MongooseModule } from '@nestjs/mongoose'
import { JwtModule } from '@nestjs/jwt'
import { PassportModule } from '@nestjs/passport'
import { ConfigModule, ConfigService } from '@nestjs/config'

import { JwtStrategy } from './strategies/jwt.strategy'
import { LocalStrategy } from './strategies/local.strategy'
import { RefreshStrategy } from './strategies/refresh.strategy'

import { User, UserSchema } from './schemas/user.schema'
import { AuthController } from './auth.controller'
import { AuthService } from './auth.service'
import { RolesGuard } from './guards/roles.guard'

@Module({
  imports: [
    MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
    PassportModule.register({
     
      session: false,
    }),
    JwtModule.registerAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        secret: configService.get('JWT_SECRET'),
        signOptions: {
          expiresIn:
            configService.get('NODE_ENV') === 'development'
              ? configService.get('JWT_MAX_EXPIRATION_DAYS')
              : configService.get('JWT_EXPIRES_IN'),
        },
      }),
      inject: [ConfigService],
    }),
  ],

  providers: [AuthService, LocalStrategy, JwtStrategy, RefreshStrategy, RolesGuard],
  controllers: [AuthController],
  exports: [AuthService],
})
export class AuthModule {}

车辆模块

import { Module } from '@nestjs/common'
import { VehicleService } from './vehicle.service'
import { VehicleController } from './vehicle.controller'
import { Vehicle} from './schemas/vehicle.schema'
import { MongooseModule } from '@nestjs/mongoose'
import { AuthModule } from '../auth/auth.module'

@Module({
  imports: [
    AuthModule,
    MongooseModule.forFeature([{ name: Vehicle.name, schema: VehicleSchema }]),
  ],
  controllers: [VehicleController],
  providers: [VehicleService],
})
export class VehicleModule {}

VehicleController 测试文件

describe('Vehicle Controller:', () => {
  let controller: VehicleController
  let service: VehicleService

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      imports: [AuthModule],
      controllers: [VehicleController],
      providers: [VehicleService],
    }).compile()

    controller = module.get<VehicleController>(VehicleController)
    service = module.get<VehicleService>(VehicleService)

    jest.clearAllMocks()
  })

当我运行车辆控制器的单元测试代码

时,我一直收到这个错误

Nest 无法解析 JwtStrategy(AuthService,?)的依赖项。请确保索引 [1] 处的参数 ConfigService 在 AuthModule 上下文中可用。 潜在的解决方案: - 如果 ConfigService 是一个提供者,它是当前 AuthModule 的一部分吗? - 如果 ConfigService 是从单独的 @Module 导出的,那么该模块是否导入到 AuthModule 中? @模块({ 导入:[ / 包含 ConfigService 的模块 / ] })

我知道这与依赖有关,但我想不出解决办法。

非常感谢任何 help/suggestion 可能的原因。

更新: 在 AuthModule 中添加这个:

@Module({
  imports: [
    ConfigModule.forRoot({
      load: [configuration],
      isGlobal: true,
    }),

...

returns 这个错误:

Nest 无法解析 UserModel (?) 的依赖项。请确保索引 [0] 处的参数 DatabaseConnection 在 MongooseModule 上下文中可用。 可能的解决方案:...

 beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      imports: [],
      controllers: [VehicleController],
      providers: [
        VehicleService,
        {
          provide: AuthService,
          useValue: {
            get: jest.fn(() => MockedAuthService),
          },
        },
      ],
    }).compile()