布尔查询参数被视为字符串而不是转换为布尔数据类型
Boolean query params are treated as strings and not transformed to boolean datatype
当传递查询参数 ({count: false}) 时,我 运行 遇到 supertest 问题 NestJS 将其视为字符串,因为未执行 dto 验证。
测试是
it.only('should NOT return count if count is turned off', async done => {
const result = await request(app.getHttpServer())
.get('/setting/')
.set('Content-Type', 'application/json')
.query({count:false})
.expect(200)
done();
});
dto 是
export class CollectionQueryDto {
@IsOptional()
@IsNotEmpty()
afterId: any;
@IsOptional()
@IsOptional()
@Transform((count, obj, type) =>
obj.count.toLowerCase() === 'true' ? true : false,
)
count: boolean;
constructor(partial: Partial<CollectionQueryDto> = {}) {
Object.assign(this, partial);
}
}
beforeAll设置如下
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [
SettingModule,
SortationOrmModule,
ConfigModule,
GlobalOrmModule,
],
providers: [SettingService, ConfigService],
}).compile();
app = moduleFixture.createNestApplication();
service = moduleFixture.get<SettingService>(SettingService);
await app.init();
const rowsAffected = await loadConfigurationData(
'TST.loadConfigurationData',
);
});
Main.ts 有验证管道
app.useGlobalPipes(
new ValidationPipe({
transform: true,
forbidUnknownValues: true,
transformOptions: {
enableImplicitConversion: true,
},
exceptionFactory: errors => new ClassValidationException(errors),
}),
);
如有任何帮助,我们将不胜感激。
在您的设置中,您可以像在 main.ts
中一样添加 app.useGlobalPipes(new ValidationPipe())
,以便为您的 e2e 测试添加管道 运行。您也可以对拦截器、过滤器和守卫执行相同的操作。
当传递查询参数 ({count: false}) 时,我 运行 遇到 supertest 问题 NestJS 将其视为字符串,因为未执行 dto 验证。 测试是
it.only('should NOT return count if count is turned off', async done => {
const result = await request(app.getHttpServer())
.get('/setting/')
.set('Content-Type', 'application/json')
.query({count:false})
.expect(200)
done();
});
dto 是
export class CollectionQueryDto {
@IsOptional()
@IsNotEmpty()
afterId: any;
@IsOptional()
@IsOptional()
@Transform((count, obj, type) =>
obj.count.toLowerCase() === 'true' ? true : false,
)
count: boolean;
constructor(partial: Partial<CollectionQueryDto> = {}) {
Object.assign(this, partial);
}
}
beforeAll设置如下
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [
SettingModule,
SortationOrmModule,
ConfigModule,
GlobalOrmModule,
],
providers: [SettingService, ConfigService],
}).compile();
app = moduleFixture.createNestApplication();
service = moduleFixture.get<SettingService>(SettingService);
await app.init();
const rowsAffected = await loadConfigurationData(
'TST.loadConfigurationData',
);
});
Main.ts 有验证管道
app.useGlobalPipes(
new ValidationPipe({
transform: true,
forbidUnknownValues: true,
transformOptions: {
enableImplicitConversion: true,
},
exceptionFactory: errors => new ClassValidationException(errors),
}),
);
如有任何帮助,我们将不胜感激。
在您的设置中,您可以像在 main.ts
中一样添加 app.useGlobalPipes(new ValidationPipe())
,以便为您的 e2e 测试添加管道 运行。您也可以对拦截器、过滤器和守卫执行相同的操作。