如何在服务中测试 $location 和 .search()
How to test $location and .search() in a service
我有一个简单的服务,它有许多方法可以从 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;
}
};
});
我在我的控制器中简单地通过以下方式调用它们:
app.controller('ShoppingCartController', function($scope, urlInterpSrv, $rootScope) {
$scope.getCartID = urlInterpSrv.getCartID();
$scope.getShippingCountry = urlInterpSrv.getShippingCountry();
});
三个问题?我应该明确测试服务,还是控制器,或两者?
我已经尝试通过以下方式显式测试该服务:
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.
你断言的是函数,而不是它的返回值。尝试:
expect(this.urlInterpSrv.getCartID()).toEqual(0087598);
你可以试试下面吗..你可以先执行函数然后比较结果
it('should getCartID from url', function(){
$location.path('/?getCartID=0087598');
var cartId = this.urlInterpSrv.getCartID();
expect(cartId).toEqual(0087598);
});
$location.path
doesn't change 'search' part of url,它改变了 'path' 部分并改为编码 ?
个字符。
应避免使用前导零的数字,因为它们在 JS 中可以是 treated as octals。
解析参数值中的基元不是 $location
的工作,getCartID
等于“0087598”字符串,而不是 87598。
it('should getCartID from url', function(){
$location.url('/?getCartID=0087598');
expect(this.urlInterpSrv.getCartID()).toEqual('0087598');
});
我有一个简单的服务,它有许多方法可以从 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;
}
};
});
我在我的控制器中简单地通过以下方式调用它们:
app.controller('ShoppingCartController', function($scope, urlInterpSrv, $rootScope) {
$scope.getCartID = urlInterpSrv.getCartID();
$scope.getShippingCountry = urlInterpSrv.getShippingCountry();
});
三个问题?我应该明确测试服务,还是控制器,或两者?
我已经尝试通过以下方式显式测试该服务:
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.
你断言的是函数,而不是它的返回值。尝试:
expect(this.urlInterpSrv.getCartID()).toEqual(0087598);
你可以试试下面吗..你可以先执行函数然后比较结果
it('should getCartID from url', function(){
$location.path('/?getCartID=0087598');
var cartId = this.urlInterpSrv.getCartID();
expect(cartId).toEqual(0087598);
});
$location.path
doesn't change 'search' part of url,它改变了 'path' 部分并改为编码 ?
个字符。
应避免使用前导零的数字,因为它们在 JS 中可以是 treated as octals。
解析参数值中的基元不是 $location
的工作,getCartID
等于“0087598”字符串,而不是 87598。
it('should getCartID from url', function(){
$location.url('/?getCartID=0087598');
expect(this.urlInterpSrv.getCartID()).toEqual('0087598');
});