我在 AngularJS 中测试一个简单的服务时遇到了一些问题,该服务依赖于另一个服务。
该服务看起来有点像这样:
serviceModule.factory('filtersService', ['$rootScope', 'urlService', function($rootScope, urlService){
return {
getFilters: function(){
if(urlService.getPathName() == "test")
{
return "something";
}
}]);
一开始我只是尝试使用 window.location.pathname 而不是创建服务,但它似乎是能够模拟它的错误方法。因此,我创建了 urlService,它基本上是窗口对象的简单包装器。
然后我的 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”,但是我将无法测试 url 不等于 test 的场景。