为确保浏览器对nestjs后端的预检请求成功,我想使用http-options调用在e2e测试中测试相应的路由。
it('/myRoute preflight should allow methods', async done => {
const RANDOM_ORIGIN = `https://${Math.random()}.random`
const res = await request(app.getHttpServer()).options('/myRoute').set('Origin', RANDOM_ORIGIN)
expect(res.header['access-control-allow-origin']).toBe(RANDOM_ORIGIN)
expect(res.header['access-control-allow-methods']).toBe('OPTIONS, GET, POST, PATCH, PUT, DELETE')
done();
});
这会导致以下错误:
2020-06-05 15:32:34 [ERROR] Error: Cannot OPTIONS /myRoute
at callback .../node_modules/@nestjs/core/router/routes-resolver.js:45:19)
原因似乎是在e2e测试中,应用是通过调用创建的
app = moduleFixture.createNestApplication();
await app.init();
因此不会执行main.ts中的代码:
const app = await NestFactory.create(AppModule);
app.enableCors();
await app.listen(3000);
(https://docs.nestjs.com/techniques/security#cors)
我当然可以使用适当的选项在e2e测试本身中启用CORS,但是我想测试main.ts中设置的设置。
如何在e2e测试中测试main.ts
中为nestjs应用程序设置的安全属性?