angularjs之Angular JS-Jasmine 如何对 $location.path().search() 进行单元测试

lidabo 阅读:9 2024-09-07 23:24:14 评论:0

一直在谷歌搜索,但找不到我这个小问题的答案。只是想从我的 Controller 测试这段代码:

$scope.viewClientAssets = (id) ->  
  $location.path("/assets").search("client_id", "#{id}")  

然后返回这个 url:

http://localhost:3000/admin#/assets?client_id=19

这一切都很好,但是在单元测试时......一些假设: 我已经正确设置了我的规范,因为我有其他测试和期望工作得很好所以这里是测试:

it 'checks if view client assets path is correct', -> 
    createController() 
    #gets rid of unnecessary function calls 
    flushRequests() 
    #calls the ctrl function with necessary args 
    $scope.viewClientAssets(clientData.client.id) 
    spyOn($location, 'path') 
    spyOn($location, 'search') #tried diff methods here such as  
    # and.returnValue(), .calls.any(), calls.all() 
    expect($location.path).toHaveBeenCalledWith("/assets") 
    expect($location.path.search).toHaveBeenCalled() 

所有其他测试都通过了,但是当它被击中时,我得到以下错误:

TypeError: Cannot read property 'search' of undefined

控制台调试器告诉我:

$scope.createClientAsset = function(id) { 
        return $location.path('/assets/create').search("client_id", "" + id); 
      }; 

那个路径是未定义的?

有什么想法吗?

请您参考如下方法:

要测试 spyOn 的搜索功能,请执行以下操作

spyOn($location, 'path').and.callThrough(); 
spyOn($location, 'search'); 

这将正确返回值。


标签:测试
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号