gpt4 book ai didi

javascript - 如何在服务中测试 $location 和 .search()

转载 作者:行者123 更新时间:2023-11-30 09:58:38 25 4
gpt4 key购买 nike

我有一个简单的服务,它有许多方法可以从 URL 中检索各种值:

app.service('urlInterpSrv', function($location) {
return {
getCartID : function() {
return $location.search().getCartID;
},
getUserAddress : function() {
return $location.search().getUserAddress;
},
getShippingCountry : function() {
return $location.search().getShippingCountry;
},
getCookie : function() {
return $location.search().getCookie;
},
getUsername : function() {
return $location.search().getUsername;
}
};
});

我在我的 Controller 中简单地通过以下方式调用它们:

app.controller('ShoppingCartController', function($scope, urlInterpSrv, $rootScope) {

$scope.getCartID = urlInterpSrv.getCartID();
$scope.getShippingCountry = urlInterpSrv.getShippingCountry();

});

三个问题?我应该明确测试服务、 Controller 还是两者?

我已经尝试通过以下方式显式测试该服务:

describe('urlInterpSrv', function(){

var $location;

beforeEach(module('myApp'));

beforeEach(inject(function (_urlInterpSrv_, _$location_) {
this.urlInterpSrv = _urlInterpSrv_;
$location = _$location_;
}));


it('should getCartID from url', function(){
$location.path('/?getCartID=0087598');
expect(this.urlInterpSrv.getCartID).toEqual(0087598);
});

});

但是我得到了错误:

Expected Function to equal 87598.

最佳答案

$location.path doesn't change 'search' part of url ,它会更改“路径”部分并改为编码 ? 字符。

应避免使用前导零的数字,因为它们可能是 treated as octals在 JS 中。

$location 的工作不是解析参数值中的原语,getCartID 等于 '0087598' 字符串,而不是 87598。

it('should getCartID from url', function(){
$location.url('/?getCartID=0087598');
expect(this.urlInterpSrv.getCartID()).toEqual('0087598');
});

关于javascript - 如何在服务中测试 $location 和 .search(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32737293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com