NestJS Jest单元测试中如何模拟Express.Multer.File类型文件对象
Nest.js + Jest单元测试模拟Express.Multer.File文件对象方案
近期开始使用Nest.js及其内置的单元测试库Jest做开发,在实现CSV文件上传及后续文件处理功能时,计划为对应接口编写单元测试,这一步需要模拟CSV文件对象,最初写的模拟代码如下:
const mockFile = { fieldname: 'file', originalname: 'TradeHistory.csv', encoding: '7bit', mimetype: 'text/csv', buffer: Buffer.from(__dirname + '/../../TradeHistory.csv', 'utf8'), size: 51828, }
但很快遇到了如下问题:
- 文件上传功能使用了
@UseInterceptors()和@UploadedFile()装饰器 - 上述装饰器接收的参数类型为 Express.Multer.File
- 最初编写的普通模拟object类型无法作为合法参数传入
后续查找将模拟文件转换为Express.Multer.File类型的方法,发现解决方案十分简单直接:使用类型断言关键字as,将模拟文件对象断言为Express.Multer.File类型即可,修正后的代码如下:
const mockFile = { fieldname: 'file', originalname: 'TradeHistory.csv', encoding: '7bit', mimetype: 'text/csv', buffer: Buffer.from(__dirname + '/../../TradeHistory.csv', 'utf8'), size: 51828, } as Express.Multer.File
这是目前可直接生效的最简方案,可能还存在其他实现方式,欢迎交流提供更多思路。
内容的提问来源于stack exchange,提问作者MSadiq
相关产品推荐
相关产品推荐

