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:
这一切都很好,但是在单元测试时......一些假设: 我已经正确设置了我的规范,因为我有其他测试和期望工作得很好所以这里是测试:
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.作者投稿可能会经我们编辑修改或补充。