NestJS: доступ к объекту через строковые литералы запрещен в тесте перехватчика - PullRequest
0 голосов
/ 07 ноября 2019

Я тестирую Interceptor, для которого требуется одна служба в качестве зависимости. Мне нужно проверить, что метод из этого сервиса был вызван. Приведенный ниже код работает, но поскольку моя зависимость является частной, я должен назвать ее так: service = interceptor['filtersService'];. Typescript не нравится это и выводит предупреждение:

доступ к объекту через строковые литералы запрещен

Есть ли другой способ шпионить за зависимостью?

describe('CreateClientFilterInterceptor', () => {
  const FiltersServiceMock = jest.fn<Partial<FiltersService>, []>(() => ({
    async create() {
      return (await SubscriberFilterMock) as Filter;
    },
  }));
  let interceptor: CreateClientFilterInterceptor;
  let service;
  beforeAll(async () => {
    interceptor = new CreateClientFilterInterceptor(
      new FiltersServiceMock() as FiltersService,
    );
    service = interceptor['filtersService'];
  });
  it('should call create method from Filter service', async done => {
    spyOn(service, 'create').and.stub();
    (await interceptor.intercept(
      executionContext as ExecutionContext,
      callHandler,
    )).subscribe(() => {
      expect(service.create).toHaveBeenCalled();
      done();
    });
  });
});

Обходной путь

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

const serviceName = 'filtersService';
const service = interceptor[serviceName];

1 Ответ

2 голосов
/ 07 ноября 2019

Поскольку вы сами создаете службу, вы можете сначала создать экземпляр, сохранить его в переменной service, а затем создать с ним перехватчик:

service = new FiltersServiceMock() as FiltersService;
interceptor = new CreateClientFilterInterceptor(service);
...