【发布时间】:2013-06-11 23:21:06
【问题描述】:
我在 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 的场景。
【问题讨论】:
标签: unit-testing angularjs jasmine angularjs-service