Проверьте, что метод в Angular-компоненте называется подпиской - PullRequest
0 голосов
/ 06 июля 2018

Если у меня есть следующий метод удаления в компоненте

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent {
  this.heroes = [];

  constructor(private heroService: HeroService) { }

  delete(hero: Hero): void {
    this.heroes = this.heroes.filter(h => h !== hero);
    this.heroService.deleteHero(hero).subscribe();
  }
}

Как я могу проверить в Jasmine, что метод удаления героя вызвал подписку в тесте.

Вот тесткоторый гарантирует, что deleteHero был вызван с определенным аргументом, но я не уверен, как проверить подписку.

// Interaction Test
it('should call deleteHero with the specificed argument', () => {
  // arrange
  mockHeroService.deleteHero.and.returnValue(of(true));
  component.heroes = HEROES;

  // act
  component.delete(HEROES[2]);

  // assert
  expect(mockHeroService.deleteHero).toHaveBeenCalledWith(HEROES[2]);
});

1 Ответ

0 голосов
/ 06 июля 2018

Вам понадобятся два шпиона:

it('should call deleteHero with the specificed argument', () => {
  const resMock = of(true);
  spyOn(resMock, 'subscribe'); // No need to .and since you do nothing after it
  mockHeroService.deleteHero.and.returnValue(resMock);
  component.heroes = HEROES;

  component.delete(HEROES[2]);

  expect(mockHeroService.deleteHero).toHaveBeenCalledWith(HEROES[2]);
  expect(resMock.subscribe).toHaveBeenCalledWith(); // check if no callback is given
});
...