我在AngularJS中测试一个简单的服务时遇到了一些问题,它依赖于另一个服务。
该服务看起来有点像这样:
serviceModule.factory('filtersService', ['$rootScope', 'urlService', function($rootScope, urlService){
return {
getFilters: function(){
if(urlService.getPathName() == "test")
{
return "something";
}
}]);一开始,我只是尝试使用window.location.pathname,而不是创建服务,但模拟它似乎是错误的方式。因此,我创建了urlService,它基本上是window-object的简单包装器。
然后我就有了如下所示的filtersServiceTest:
describe('filtersService test', function(){
var filtersService, urlServiceMock;
beforeEach(module('App.services'));
beforeEach(function(){
urlServiceMock = {
getPathName: function(){
return "";
}
};
module(function($provide){
$provide.value('urlService', urlServiceMock);
});
});
it('Should return something if url is test', inject(function(filtersService){
urlServiceMock = {
getPathName: function(){
return "test";
}
};
expect(filtersService.getFilters()).not.toBe("something");
}));
});但这似乎行不通。在实际运行之前,我不能重载urlServiceMock。我可以更改“beforeEach”,这样getPathName就会返回" test ",但这样我就不能在urls不等于test的地方测试scenarious。
发布于 2013-06-15 22:47:41
您可以监视测试套件中的服务以更改行为:
spyOn(yourService, 'methodName');在jsFiddle上有一个关于如何实现间谍的很好的例子:http://jsfiddle.net/robinroestenburg/aDwva/
这应该可以让它正常工作。
https://stackoverflow.com/questions/17123227
复制相似问题