Angular 5 - 我们如何测试 router.navigate([id],{relativeTo : this. _activatedRoute}])

标签 angular jasmine karma-runner

我想在 jasmine, karma 中测试这个功能。测试此功能的首选方法是什么。

功能测试(负载){ 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,

    }]

最佳答案

我假设您在您的组件中使用 (_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'});
});

关于Angular 5 - 我们如何测试 router.navigate([id],{relativeTo : this. _activatedRoute}]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51204836/

相关文章:

javascript - 警告 : Task "karma" not found. 使用 --force 继续

AngularJS + Jasmine 测试脚本失败 fn 不起作用

css - Ionic 3 中的背景图像绑定(bind)不起作用,无论我如何传递它

Angular TypeError : _angular_core__WEBPACK_IMPORTED_MODULE_1__. ɵɵdefineInjectable 不是函数

node.js - 如何在 Angular 6 中获取 EPOCH 日期时间格式?

javascript - 如何使用 Jasmine 测试 HTML DOM click()?

javascript - 无法在 npm Ubuntu 中安装 jasmine-core

可选参数的 Angular RouterLink queryParamsHandling

Angular Testing 和 HttpClient : TypeError: Cannot read property 'get' of undefined

在两个独立的 Angular 应用程序之间切换时,AngularJS e2e 测试挂起