带依赖测试的Angular指令



我正努力成为一名优秀的开发人员& &;写一些测试来覆盖我的指令。指令中注入了一个服务,用来调用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);
        }));
});

参考- http://www.mikeobrien.net/blog/overriding-dependencies-in-angular-tests/-它会工作,如果你做你的'$提供'配置在'模块的上下文中,即做一些像-

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);
})); });

最新更新