Nestjs 布尔查询参数被视为字符串,不转换为布尔数据类型
当传递查询参数({count:false})时,我遇到了supertest问题,因为没有执行dto验证,NestJS将其视为字符串。 测试是 dto是Nestjs 布尔查询参数被视为字符串,不转换为布尔数据类型,nestjs,supertest,Nestjs,Supertest,当传递查询参数({count:false})时,我遇到了supertest问题,因为没有执行dto验证,NestJS将其视为字符串。 测试是 dto是 export class CollectionQueryDto { @IsOptional() @IsNotEmpty() afterId: any; @IsOptional() @IsOptional() @Transform((count, obj, type) => obj.count.toLowe
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);
}
}
任何帮助都将不胜感激。在您的设置中,您可以像在
main.ts
中一样添加app.useGlobalPipes(新的ValidationPipe())
,以便为e2e测试运行管道。您也可以对拦截器、过滤器和防护装置执行相同的操作。您也可以显示您的测试设置吗?也就是说,beforeach/beforeAll
在哪里设置app
进行测试?我已经在上面添加了它。感谢您对此进行研究。最后一个问题,验证管道如何绑定到服务器?是基于路由还是全局绑定?全局绑定。非常感谢。现在我明白了为什么转换没有发生,所以我想知道在启用全局验证的情况下e2e测试是如何完成的。太棒了,这很有效。非常感谢您的回答并帮助我思考整个过程
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(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',
);
});
app.useGlobalPipes(
new ValidationPipe({
transform: true,
forbidUnknownValues: true,
transformOptions: {
enableImplicitConversion: true,
},
exceptionFactory: errors => new ClassValidationException(errors),
}),
);