Параметры логического запроса обрабатываются как строки и не преобразуются в логический тип данных. - PullRequest
2 голосов
/ 04 февраля 2020

У меня проблема с supertest, когда передается параметр запроса ({count: false}). Nest JS обрабатывает его как строку, поскольку проверка 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(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),
    }),
  );

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 февраля 2020

В вашей настройке вы можете добавить app.useGlobalPipes(new ValidationPipe()) так же, как вы делаете в main.ts, чтобы каналы работали для ваших тестов e2e. Вы можете сделать то же самое с перехватчиками, фильтрами и охранниками тоже.

...