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

NestJS单元测试报错:express_1 is not defined 求助

问题分析

报错ReferenceError: express_1 is not defined的核心原因是:Express.Multer.File是TypeScript类型定义,编译后会被转换为运行时对express模块的引用,但Jest测试环境中这个引用是冗余的——运行时根本不需要类型信息,却被错误地保留了下来。

解决方案

方案1:使用类型-only导入(推荐)

将Express的导入改为类型-only导入(TypeScript 3.8+支持),编译时TypeScript会自动移除这个导入,不会在运行时产生无效引用:

// 替换原有导入
import type { Express } from 'express';

修改后,测试代码运行时就不会再出现express_1未定义的错误。

方案2:直接导入Multer的File类型

跳过对Express类型的依赖,直接从multer包导入File类型:

import { File } from 'multer';

// 修改控制器方法的参数类型
@Post('/upload/image')
@UseInterceptors(FileInterceptor('file'))
uploadImage(@UploadedFile() file: File, @Request() request: any) {
  return this.cloudinaryService.uploadFile(file, {
    environment: request.query.environment,
    domain: request.query.domain,
    path: request.query.path,
    name: request.query.name,
  });
}

这种方式彻底避开了Express类型的依赖,同样能解决测试报错问题。

额外检查(可选)

确认BbbModule中已正确导入MulterModule(应用运行正常大概率已经配置,但测试时需保证模块导出正确):

// bbb.module.ts
import { Module } from '@nestjs/common';
import { MulterModule } from '@nestjs/platform-express';
import { BbbController } from './bbb.controller';
import { CloudinaryService } from './cloudinary.service';

@Module({
  imports: [MulterModule.register({ dest: './uploads' })],
  controllers: [BbbController],
  providers: [CloudinaryService],
  exports: [BbbController], // 若其他模块需引用则添加
})
export class BbbModule {}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:03:27