Как смоделировать введенную зависимость в модульном тесте угловой трубы - PullRequest
0 голосов
/ 07 марта 2019

В настоящее время я учу себя Angular, чтобы стать программистом, и у меня есть вопрос относительно приложения, которое я создаю. Я построил канал, чтобы проверить, была ли включена пользовательская функция

import { Inject, Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'hasFeature'
})
export class HasFeaturePipe implements PipeTransform {

  private $user: any;

  constructor(@Inject('$user') $user) {
    this.$user = $user;
  }

  transform(value: any, args?: any): any {
    return this.$user.hasFeature(value);
  }
}

'$ user' определено в приложении AngularJS, которое я создал и слил с моим Angular APP, так что это немного гибридное приложение, которое я создаю. Я завернул $ user в небольшую оболочку провайдера, которую я добавил в массив провайдеров моего файла app.module.ts. Это содержимое оболочки:

const userService = ($injector: any) => $injector.get('$user');

export const ANGULARJS_SERVICES = [{
    provide: '$user',
    useFactory: userService,
    deps: ['$injector']
  }];

и вот как я делаю это доступным в файле app.module.ts провайдеры: [I18N_PROVIDERS]. Теперь я не уверен, как добавить зависимость $ user в мои тесты конвейера и как правильно тестировать, вот что у меня есть:

const mock$user = {hasFeature: (value) => {value === 'featureOK'}};

describe('HasFeaturePipe', () => {
  it('create an instance', () => {
    const pipe = new HasFeaturePipe('n/a');
    expect(pipe).toBeTruthy();
  });

  describe('hasFeature', () => {
    it('should', inject(['$user'], (mock$user) => {
      const pipe = new HasFeaturePipe('featureOK');
      expect(pipe).toBeTruthy(true);
    }))
  });
}); 

Естественно, это не работает, и я получаю сообщение об ошибке " Тип 'string []' нельзя назначить типу 'InjectionToken <(done: DoneFn) => void>'. Свойство '_desc' отсутствует в типе 'string []'."

Может кто-нибудь помочь объяснить, как решить мою проблему? Труба отлично работает в приложении, но я должен быть хорошим разработчиком и тестировать весь свой код. Заранее спасибо.

...