Как протестировать компонент с текстом @Inject в конструкторе в Angular - PullRequest
1 голос
/ 22 мая 2019

Angular 6, я объявляю некоторые введенные переменные в конструкторе моего компонента, но я не знаю, как настроить введенное значение в файле модульного теста, когда я запускаю ng test, и это дает следующую ошибку:

Ошибка: StaticInjectorError (DynamicTestModule) [title]:
StaticInjectorError (Платформа: ядро) [название]: NullInjectorError: Нет провайдера для заголовка!

// Мой компонент

export class ConfirmModalComponent extends BaseModal implements OnInit {
  choosedCandidates: Array<any> = [];

  constructor(
      @Inject('title') public title,//injected variable
      protected modalService: ModalService
  ) {
      super();
  }

  ngOnInit() {
  }
  ....
}
//spec file of my component
beforeEach(async(() => {
  TestBed.configureTestingModule({
      declarations: [ DelInterviewerConfirmModalComponent ],
      imports: [ CheckboxModule, TranslateModule ],
      providers: [ 
        { provide: title, useValue: 'modal title' },
        ModalService, 
        RequisitionDetailService ],
    schemas: [ CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA ],
  })
.compileComponents();
}));

beforeEach(() => {
  fixture = TestBed.createComponent(DelInterviewerConfirmModalComponent);
  component = fixture.componentInstance;
  component.title = "test";
  fixture.detectChanges();
});

it('should create', () => {
  expect(component).toBeTruthy();
});

Интересно, сталкивался ли кто-нибудь с такой же проблемой и как устранить ошибки, заранее спасибо.

1 Ответ

0 голосов
/ 22 мая 2019

Значения, такие как даты, числа и строки, должны быть заключены в Injection Token .

1 .: Создайте токен для инъекций:

export const TITLE = new InjectionToken<string>('title');

2 .: Впрысните, как вы делаете сейчас:

constructor(@Inject(TITLE) private title: string)

3 .: В своем тесте имитируйте егоиспользуя InjectionToken:

  TestBed.configureTestingModule({
      declarations: [ DelInterviewerConfirmModalComponent ],
      imports: [ CheckboxModule, TranslateModule ],
      providers: [ 
        { provide: TITLE, useValue: 'modal title' },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...