Модульное тестирование угловых компонентов с помощью rxjs Предметы, использующие жасмин - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть два компонента и сервисный уровень.Служебный уровень имеет субъект, объявленный в нем с определением метода set и get.Первый компонент, основанный на действии пользователя, вызывает метод set субъекта, в то время как второй компонент подписан на тот же субъект.Это работает просто отлично, но когда я пытаюсь протестировать подписку во втором компоненте, у меня возникают проблемы с подходом.У меня есть фиктивный сервисный слой, созданный для тестирования других функций.

Подписка внутри ngOnit не попадает во время тестового прогона.Код выполняется в рамках подписки, когда компонент инициализируется, но не после вызова setSubject.Когда я отлаживаю, я вижу, что он срабатывает после завершения выполнения, но у меня нет возможности проверить, обновлены ли данные.

export class MockService {
 private subject = new Subject<any>();

 getSubject() {
   return Observable.of(this.subject);
 }

 setSubject(value) {
   this.subject.next({ message: value });
 }

}

Компонент 2

export class Component2 implements OnInit {
  textFromComponent1: string;
  subscription: Subscription;

  constructor(public service: Service) {}
  ngOnInit() {
    this.subscription = this.service.getSubject().subscribe(message => {
      this.textFromComponent1 = message.value;
    });
  }
}

Блок компонента 2Тест

beforeEach( async(() => {
    TestBed.configureTestingModule( {
        declarations: [Component2],
        schemas: [CUSTOM_ELEMENTS_SCHEMA],
        providers: [{ provide: Service, useClass: MockService }]
    } )
        .compileComponents();
} ) );
beforeEach(() => {
    fixture = TestBed.createComponent( Component2 );
    component = fixture.componentInstance;
    fixture.detectChanges();
});
it('should test subscription' () => {
   component.service.setSubject("abc");
   expect(component.textFromComponent1).toBe("abc");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...