Жасминовый тест на route.data.subscribe () - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть компонент с 2 методами ниже.

Как проверить на ngOnInit (), что метод nameList () должен иметьBeenCalledWith (Students)

constructor(route: ActivatedRoute, location: Location) { 
}

ngOnInit() {
    this.route.data
    subscribe((data: { students: Students }) => {
       const students: Students = data.students;
       this.nameList(students);
    });
}

nameList(students: Student) {
  .....
}

Что у меня так далеко:

describe('ngOnInit', () => {
    it('should extract data from route', () => {

      component = fixture.componentInstance;

      spyOn(component.route.data, 'subscribe').and.callFake((data: { students: Students }) => { } );
      component.ngOnInit();
      fixture.detectChanges();

      expect(component.nameList).toHaveBeenCalledWith(students);

    });
  });

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

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

Я ожидаю, что метод nameList () будет вызван с правильными данными,

, поэтому следите непосредственно за nameList ().

spyOn(component, 'nameList');
component.ngOnInit();

expect(component.nameList).toHaveBeenCalledWith(mockData);
0 голосов
/ 17 сентября 2018

Не следите за подпиской, следите за самим роутером.

const dataMock: any = { students: [] };

component['route'] = jasmine.createSpyObj('ActivatedRoute', ['data'])
component['route'].data.and.returnValue(of(dataMock));
// OR
spyOn(component['route'], 'data').and.returnValue(of(dataMock));

const spy = spyOn(component, 'nameList');

component.ngOnInit();

expect(spy).toHaveBeenCalledWith(dataMock.students);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...