Angular JS-Jasmine 如何对$location.path().search() 进行单元测试?
Angular JS-Jasmine how to unit test $location.path().search()?
一直在谷歌搜索,但找不到我这个小问题的答案。只是想从我的控制器测试这段代码:
$scope.viewClientAssets = (id) ->
$location.path("/assets").search("client_id", "#{id}")
反过来 returns 这个 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);
};
该路径未定义?
有什么想法吗?
您正在监视 $location.path
而不是 return 任何东西,或者 return 未定义。
让你的间谍 return 成为一个字符串(你通常期望的字符串,实际路径)和为 javascript 中的所有字符串定义的搜索函数将在你的测试中正常工作。
例如操作如下:
spyOn($location, 'path').and.returnValue('/client_id/')
$location.path('anything'); // returns '/client_id/'
要测试 spyOn,进行搜索,请执行以下操作
spyOn($location, 'path').and.callThrough();
spyOn($location, 'search');
这将 return 值正确。
一直在谷歌搜索,但找不到我这个小问题的答案。只是想从我的控制器测试这段代码:
$scope.viewClientAssets = (id) ->
$location.path("/assets").search("client_id", "#{id}")
反过来 returns 这个 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);
};
该路径未定义?
有什么想法吗?
您正在监视 $location.path
而不是 return 任何东西,或者 return 未定义。
让你的间谍 return 成为一个字符串(你通常期望的字符串,实际路径)和为 javascript 中的所有字符串定义的搜索函数将在你的测试中正常工作。
例如操作如下:
spyOn($location, 'path').and.returnValue('/client_id/')
$location.path('anything'); // returns '/client_id/'
要测试 spyOn,进行搜索,请执行以下操作
spyOn($location, 'path').and.callThrough();
spyOn($location, 'search');
这将 return 值正确。