使用Fastify的NestJS端到端测试出现@nestjs/platform-express缺失错误
问题成因
NestJS 测试模块的 createNestApplication() 方法默认使用 @nestjs/platform-express 作为 HTTP 适配器,该默认配置不会自动继承你主应用中使用的 Fastify 配置。所以即使你的业务代码全部基于 Fastify 开发,只要测试代码没有显式指定适配器,Nest 就会尝试加载 express 相关依赖,最终抛出缺失包的报错。
解决方法
推荐方案:测试代码显式指定 Fastify 适配器
- 首先确保你已经安装了 Fastify 相关依赖,缺失可执行
npm i @nestjs/platform-fastify fastify安装 - 修改你的
app.e2e-spec.ts测试文件:- 导入 Fastify 适配器
import { FastifyAdapter } from '@nestjs/platform-fastify';- 替换创建应用的代码,手动传入适配器
// 原有代码 // app = moduleFixture.createNestApplication(); // 替换为以下代码 app = moduleFixture.createNestApplication(new FastifyAdapter());
修改完成后重新执行 npm run test:e2e 即可正常运行。该方案可以保证测试环境和你生产环境使用的 HTTP 服务完全一致,避免出现环境差异导致的隐性问题。
可选方案(不推荐):安装 platform-express 依赖
如果不想修改测试代码,也可以直接执行 npm i @nestjs/platform-express 安装缺失的依赖,测试也可以正常运行。但该方案会引入冗余依赖,且测试环境和生产环境使用的HTTP服务不一致,可能会出现预期外的问题。
内容的提问来源于stack exchange,提问作者Daniel Kucal
相关产品推荐
相关产品推荐

