gpt4 book ai didi

nestjs - bool 查询参数被视为字符串,而不是转换为 bool 数据类型

转载 作者:行者123 更新时间:2023-12-04 17:30:37 25 4
gpt4 key购买 nike

当传递查询参数 ({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),
}),
);

任何帮助,将不胜感激。

最佳答案

在您的设置中,您可以添加 app.useGlobalPipes(new ValidationPipe())就像您在 main.ts 中所做的那样以便为您的 e2e 测试运行管道。你也可以对拦截器、过滤器和守卫做同样的事情。

关于nestjs - bool 查询参数被视为字符串,而不是转换为 bool 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60065176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com