angular - 如何在 Angular 中匹配 toHaveBeenCalledWith 中的部分 url

标签 angular unit-testing jasmine

我正在通过使用 toHaveBeenCalledWith 匹配它的某些部分来测试 url,参数应该没有 null/

expect(router.navigate).toHaveBeenCalledWith(jasmine.objectContaining(['/home'])); 

在我尝试上面的命令后,我得到了这个错误:

Expected spy navigate to have been called with [ <jasmine.objectContaining([ '/home' ])> ] but actual calls were [ [ 'null/home' ] ].

最佳答案

您需要使用 RouterTestingModule 设置您的测试,但这需要您测试导航结果而不是检查使用的导航参数。

相反,你可以有这样的东西:

class RouterMock {
  navigate = jasmine.createSpy('navigate')
}

TestBed.configureTestingModule({
  providers: [
    {
      provide: Router,
      useClass: RouterMock 
    },
    ...
  ]
});

你可以像这样检查 spy 最后调用的参数:

it('should...', inject([Router], (router: RouterMock) => {
  // ... setup test
  expect(router.navigate.calls.mostRecent().args).toEqual(jasmine.objectContaining(['/home'])); 
}))

Stackblitz example

关于angular - 如何在 Angular 中匹配 toHaveBeenCalledWith 中的部分 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507971/

相关文章:

Angular 2 和全屏 API

angularjs - 为什么使用 ngMock 包装第三方 Promise 时 $q.when 无法解析?

javascript - Jasmine 2.x 附带 Protractor 了吗?

javascript - 找不到 Angular JS Karma 模块

angular - 在 angular4 中发布数据时是否发生缺少参数 : email, 密码错误?

css - Angular Material 2 - 工具提示未正确显示

node.js - Angular2 API 调用不返回任何内容

android - Robolectric - screen_action_bar.xml 第 #-1 行(抱歉,尚未实现): Error inflating class <unknown>

ruby-on-rails - 在文件中存储测试数据的最佳格式是什么?

android - 单元测试中的 Sugar orm 产生了空指针异常