ClassSerializeInterceptor in Nest. JS Модульные тесты - PullRequest
0 голосов
/ 04 февраля 2020

Можно ли использовать ClassSerializeInterceptor при тестировании контроллеров Nest. JS?

Наша проблема в том, что ClassSerializeInterceptor прекрасно работает как часть приложения, но не запускается, когда создается экземпляр контроллера как часть модульный тест. Я попытался предоставить ClassSerializeInterdeptor как часть модуля тестирования, но безуспешно.

Пример кода:

Test

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService,  ClassSerializerInterceptor],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root',  () => {
    it('should not expose exlcuded fields"', async  () => {

      // expect(appController.getHello()).toBe('Hello World!');

      const s = await appController.getHello();

      expect(s).toHaveProperty('shouldBeIncluded');
      expect(s).not.toHaveProperty('shouldBeRemoved');

    });
  });
});

Test Entity:

@ObjectType()
@Entity()
export class TestEntity {

  @Field(type => ID)
  @PrimaryGeneratedColumn('uuid')
  shouldBeIncluded: string;

  @Column({ nullable: true })
  @Exclude()
  shouldBeRemoved: string;
}

1 Ответ

1 голос
/ 04 февраля 2020

Тестирование перехватчиков как части потока запросов может быть выполнено только в e2e и тесте частичной интеграции. Вам нужно настроить экземпляр supertest как , описанный в документации , и отправить запрос, чтобы убедиться, что ClassSerializeInterceptor работает так, как вы ожидаете.

...