Угловой 5 - Как мы можем проверить router.navigate ([id], {lativeTo: this._activationRoute}]) - PullRequest
0 голосов
/ 06 июля 2018

Я хочу проверить эту функцию в жасмине, карме. какой способ проверки этой функции предпочтителен.

function test(payload){ this._router.navigate([this.result.id], {relativeTo: this._activatedRoute}) }

Я написал этот тест для спецификации.

it('navigate to redirects', function(){
    let router=TestBed.get(Router);
    let spy = spyOn(router,"navigate");
    
    const payload: any = {
      event:{
        body:{
          result:{
            collections: 0,
            data: [],
            errors: [],
            errors_count: 0,
            meta: {},
            upload_id: "r1q3oFQfX"
          }
        }
      }
     };

   // console.log("##################id=",payload.event.body.result.upload_id);
    component.test(payload);
    fixture.detectChanges();
    expect(spy).toHaveBeenCalledWith([payload.event.body.result.upload_id])
  });

а я создал поддельный класс

class RouterStub{
  navigate(params){
    console.log("parames",params)
  }
}

и добавьте в configuraTestModule тоже

 providers: [
    {provide: ENGINE_CONFIG,Store,Actions,Router,useValue:routerStub,

    }]

1 Ответ

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

Позвольте мне предположить, что в вашем компоненте вы используете (_router: Router).

Таким образом, в вашем тесте будут добавлены эти строки

class MockRouterService {
  navigate() { }
}

const mockRouterService = new MockRouterService();

TestBed.configureTestingModule({
  imports: [
    ...,
    RouterTestingModule,
  ],
  providers: [
    {
      provide: Router,
      useValue: mockRouterService,
    },
  ],
})
.compileComponents();

Приведенный выше код поможет вам смоделировать службу Router с помощью поддельного класса, содержащего только ту функцию, которую вы хотите протестировать.
тогда ты просто

it('should call navigate', () => {
  spyOn(mockRouterService, 'navigate');
  component.test(abc);
  expect(mockRouterService.navigate).toHaveBeenCalled();
});

или вы можете проверить даже более конкретно, как это

it('should call navigate with correct params', () => {
  spyOn(mockRouterService, 'navigate');
  this._activatedRoute = 'your route';
  component.test({id: 1});
  expect(mockRouterService.navigate).toHaveBeenCalledWith([1], {relativeTo: 'your route'});
});
...