javascript - 如何在 e2e 測試中應用全局管道
在使用 Test.createTestingModule 時,如何套用全局管道?
通常,當應用程式在 main.ts 中掛載時,會添加全局管道。
beforeEach(async done => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule]
}).compile()
app = moduleFixture.createNestApplication()
await app.init()
done()
})
答案#1
這是我為了確保我的 main.ts 文件中的全域管道始終與我的測試設置同步所做的事情...
首先建立一個名為 main.config.ts 的新檔案,這裡應該包含你的全域管道、過濾器等:
import { INestApplication, ValidationPipe } from "@nestjs/common";
export function mainConfig(app: INestApplication) {
app.enableCors();
app.useGlobalPipes(new ValidationPipe());
}
接下來,在 main.ts 和 app.e2e-spec.ts(或你設定測試的任何位置)中使用新建立的 mainConfig 函數:
main.tsimport { NestFactory } from "@nestjs/core";
import { mainConfig } from "main.config";
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// use here
mainConfig(app);
await app.listen(3000);
}
bootstrap();
app.e2e-spec.tsimport { INestApplication } from "@nestjs/common";
import { TestingModule, Test } from "@nestjs/testing";
import { AppModule } from "app.module";
import { mainConfig } from "main.config";
let app: INestApplication;
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
// use here
mainConfig(app);
await app.init();
});
現在如果你需要新增一個管道,你只需要在一個地方(main.config.ts)進行更改,就能在應用程式和測試中看到相應的變化。
答案#2
你可以在初始化測試模組之前添加它們:
beforeEach(async done => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule]
}).compile()
app = moduleFixture.createNestApplication()
// Add global pipe here
app.useGlobalPipes(new ValidationPipe({ transform: true, whitelist: true, forbidNonWhitelisted: true }))
await app.init()
done()
})
