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
相关产品推荐
相关产品推荐

