testing - 如何在nestjs的e2e测试中配置中间件
问题描述
在实际应用中,我们编写:
export class AppModule implements NestModule {
constructor() {}
configure(consumer: MiddlewareConsumer) {
consumer.apply(JwtExtractionMiddleware).forRoutes({
path: 'graphql',
method: RequestMethod.ALL,
});
}
}
在 e2e 测试中,我执行以下操作:
const module = await Test.createTestingModule({
imports: [ GraphQLModule.forRoot(e2eGqlConfig) ],
providers: [ PubUserResolver ],
}).compile();
app = await module.createNestApplication().init();
那么如何在 e2e 测试中使用特定的中间件呢?
解决方案
也许尝试TestModule
仅为 e2e 创建一个特定的类并将其提供给createTestingModule
?
@Module({
imports: [ GraphQLModule.forRoot(e2eGqlConfig) ],
providers: [ PubUserResolver ],
})
export class TestModule implements NestModule {
constructor() {}
configure(consumer: MiddlewareConsumer) {
consumer.apply(JwtExtractionMiddleware).forRoutes({
path: 'graphql',
method: RequestMethod.ALL,
});
}
}
然后在 e2e 中:
const module = await Test.createTestingModule({
imports: [TestModule]
}).compile();
app = await module.createNestApplication().init();
我有类似的问题,我需要附加全局中间件。互联网上也没有关于此的信息,但偶然我找到了解决方案。也许有人会寻找它,所以这里是:
要在 NestJS 的 e2e 中使用全局中间件:
首先创建应用程序,但不要初始化它。只编译:
const app = Test
.createTestingModule({ imports: [AppModule] })
.compile()
.createNestApplication();
之后,您可以添加所有全局中间件:
app.enableCors();
app.use(json());
app.use(formDataMiddleware(config));
现在初始化应用程序,就是这样:
await app.init();
推荐阅读
- c++ - 输入(作为条件)在输入值时终止
- reactjs - Babel loader 不会转译特定于平台的导出
- android - 如何知道像 TextField 这样的 Composable 何时获得焦点?
- google-chrome - 通过 gpo 在 chrome 中禁用 NEW TAB 和 NEW WINDOW
- python - TypeError: 不支持的操作数类型 *: 'float' 和 'NoneType' 在构建 pyomo 模型时
- javascript - JavaScript 检查是 word 文档是否打开
- android - 当我仅在省电模式下使用插拔 USB 进行测试时,如何避免自动重新启动活动
- selenium - Pytest + 硒。测试网站上的所有链接
- html - HTML,CSS:将按钮内的文本与图像对齐
- c# - 插入 Catia V5 CATDrawing 时保存的 png 图像失去透明度