首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试具有依赖关系的AngularJS服务

测试具有依赖关系的AngularJS服务
EN

Stack Overflow用户
提问于 2013-06-15 19:38:09
回答 1查看 2.8K关注 0票数 4

我在AngularJS中测试一个简单的服务时遇到了一些问题,它依赖于另一个服务。

该服务看起来有点像这样:

代码语言:javascript
复制
serviceModule.factory('filtersService', ['$rootScope', 'urlService', function($rootScope, urlService){
        return {
            getFilters: function(){
                   if(urlService.getPathName() == "test")
                   {
                      return "something";
               }
    }]);

一开始,我只是尝试使用window.location.pathname,而不是创建服务,但模拟它似乎是错误的方式。因此,我创建了urlService,它基本上是window-object的简单包装器。

然后我就有了如下所示的filtersServiceTest:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-15 22:47:41

您可以监视测试套件中的服务以更改行为:

代码语言:javascript
复制
spyOn(yourService, 'methodName');

在jsFiddle上有一个关于如何实现间谍的很好的例子:http://jsfiddle.net/robinroestenburg/aDwva/

这应该可以让它正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17123227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档