带有依赖性测试的角度指令

时间:2015-10-21 13:34:12

标签: angularjs jasmine

我正在努力成为一名优秀的开发人员。写一些测试来涵盖我的指令。该指令注入了一个服务,该服务调用webApi端点。

当我运行测试时(在分钟时预计1等于2所以我可以证明测试实际上正在运行!!)我得到一个错误,即我认为我已经对我的真实端点发出意外请求GET模拟/删除服务,以便测试执行。我的测试看起来如下所示:

我认为通过使用我的服务名称调用$provide.service然后模拟方法" getUserHoldings"那么这会在测试时自动注入,我在这里错过了一个技巧吗?意外请求的端点路径包含在具体服务的实际getUserHoldings方法中。

感谢您提供的任何帮助,因为我可以帮忙!

        describe('directive: spPlanResults', function () {
            var scope;
            var directiveBeingTested = '<sp-plan-results></sp-plan-results>';
            var element;

            beforeEach (module('pages.plans'));

            beforeEach (inject(function ($rootScope,
                                     $compile,
                                     currencyFormatService,
                                     _,
                                     moment,
                                     plansModel,
                                     appConfig,
                                     $timeout,
                                     $q,
                                     $provide) {
                scope = $rootScope.$new();

            $provide.service('plansService', function () {
                return {
                    getUserHoldings: function() {
                        var deferred = $q.defer();
                        return deferred.resolve([
                            {
                                class: 'Class1',
                                classId: 2,
                                award: 'Award1',
                                awardId : 2
                            }]);
                    }
                };
            });
            element = $compile(directiveBeingTested)(scope);
            scope.$digest();
    });

        it ('should be there', inject(function() {
            expect(1).equals(2);
        }));
});

1 个答案:

答案 0 :(得分:1)

引用 - http://www.mikeobrien.net/blog/overriding-dependencies-in-angular-tests/ - 如果您提供了“提供”功能,它就可以正常运行。在&f;模块的上下文中进行配置,即执行类似 -

的操作
describe('directive: spPlanResults', function () {

var scope;
var directiveBeingTested = '<sp-plan-results></sp-plan-results>';
var element;

beforeEach(module('pages.plans', function($provide) {
    $provide.value('plansService', function() {
            return {
                getUserHoldings: function() {
                    var deferred = $q.defer();
                    return deferred.resolve([{
                        class: 'Class1',
                        classId: 2,
                        award: 'Award1',
                        awardId: 2
                    }]);
                }
            };
    });
}));

beforeEach(inject(function($rootScope, $compile, currencyFormatService, _,  moment, plansModel, appConfig,  $timeout, $q) {
    scope = $rootScope.$new();
    element = $compile(directiveBeingTested)(scope);
    scope.$digest();
});

it('should be there', inject(function() {
    expect(1).equals(2);
})); });