Angular: Как использовать маршрутизатор в angular модульном тестировании - PullRequest
1 голос
/ 23 апреля 2020

Я пишу контрольный пример в angular. Я написал условие, если res.length === 1 перенаправить на страницу сведений. (this.router.navigate(['details', id])). Я получаю id из первого массива объекта в ответе тела как const id = res[0].id. Обе эти строки не включены в мое покрытие кода. Может кто-нибудь сообщить мне, где я допустил ошибку?

Я получаю Expected spy navigate to have been called with [ [ '/product-details', 'SAAASD0001' ] ] but it was never called.

app.component.spe c .ts

let router = {navigate: jasmine.createSpy('navigate')};
TestBed.configureTestingModule({
  imports: [RouterTestingModule],
  providers: [
    { provide: Router, useValue: router }
  ]
})
it('should take data from store', () => {
  const mockData = [
      {
        id: '123',
        name: 'Stackoverlow',
      }
  ]
  expect(component.getList).toEqual(mockData);

  const productId = mockData[0].id;
  expect(router.navigate).toHaveBeenCalledWith(['/details', id]);
});

app.component.ts

  getList() {
    this.store
      .select('content', 'catalogue')
      .pipe(takeUntil(this.onDestroy$))
      .subscribe((res) => {
        Iif (res.length === 1) {
          // this line doesn't cover
          const id = res[0].id;
          // this line doesn't cover
          this.router.navigate(['details', id]);
        } else {
          this.list = category(res);
        }
      });
  }

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Создайте Router и Store publi c в компоненте и попробуйте:

TestBed.configureTestingModule({
  imports: [RouterTestingModule],
  providers: [Router,Store ]
})

it('should take data from store', () => {
  const response = [{id: 'val'}];
  spyOn(component.store,"select").and.returnValue(of(response));
  spyOn(component.router,"navigate").and.callThrough();
  component.getList();
  expect(router.navigate).toHaveBeenCalledWith(['/details', response[0].id]);
});

аналогичным образом покройте else деталь, изменив const response = [{id: 'val'}];

0 голосов
/ 26 апреля 2020

Добавьте эту вещь к вашему импорту:

 RouterTestingModule.withRoutes([
          { path: 'path1', component: TestComponent1},
          { path: 'home', component: DashboardComponent }
        ]),

позже в вашем тестовом примере: вы можете шпионить за "Navigate" Маршрутизатора и использовать его для перенаправления на любой компонент, упомянутый в импорте.

spyOn(Router,"navigate").and.callthrough();
router.navigate([/path1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...