【问题标题】:How to inject a service to jasmine如何向茉莉花注入服务
【发布时间】:2015-05-30 15:12:24
【问题描述】:

我有以下测试用例 MeetingCtrlSpec.js

describe('ViewMeetingCtrl', function () {
        var $rootScope, scope, $controller   ;

       beforeEach(angular.mock.module('MyApp'));

       beforeEach(inject(function ($rootScope, $controller  ) {
            scope = $rootScope.$new();
            $controller('ViewMeetingCtrl', {
            $scope: scope,
           }); 
        }));

        it('should change greeting value if name value is changed', function () {
            //some assertion
        });
    });

ViewMeetingCtrl.js

(function () {
    'use strict';
    angular.module('MyApp').controller('ViewMeetingCtrl', ViewMeetingCtrl);

    ViewMeetingCtrl.$inject = ['$scope', '$state', '$http', '$translate', 'notificationService', 'meetingService', '$modal', 'meeting', 'attachmentService'];

    function ViewMeetingCtrl($scope, $state, $http, $translate, notificationService, meetingService, $modal, meeting, attachmentService) {
        $scope.meeting = meeting;                    
        //more code goes here
    }
})();

这个会议来自app.routes.js文件

.state('company.meeting', {
                abstract: true,
                url: '/meetings/:meetingId',
                template: '<ui-view/>',
                resolve: {
                    meeting: function(meetingService, $stateParams){
                        return meetingService
                                .getMeeting($stateParams.meetingId)
                                .then(function(response){
                                    return response.data;
                                });
                    }
                },
            })

我的问题是关于在这个 ctrl 中注入 meeting 。我不确定如何在我的测试用例中注入它。我确实喜欢以下内容。

describe('ViewMeetingCtrl', function () {
            var $rootScope, scope, $controller , meeting   ;

           beforeEach(angular.mock.module('MyApp'));

           beforeEach(inject(function ($rootScope, $controller , meeting     ) {
                scope = $rootScope.$new();
                $controller('ViewMeetingCtrl', {
                $scope: scope,
                meeting : meeting   
               }); 
            }));

            it('should change greeting value if name value is changed', function () {
                //some assertion
            });
        });

...我收到了这个错误Error: [$injector:unpr] Unknown provider: meetingProvider &lt;- meeting

如何向我的测试用例注入 meeting 依赖项。 ?

【问题讨论】:

    标签: angularjs unit-testing jasmine karma-runner karma-jasmine


    【解决方案1】:

    Meeting 不是服务,而是路由解析时注入的对象。在您的测试用例中,您应该显式创建 meeting 虚拟对象。

     beforeEach(inject(function ($rootScope, $controller,$q ) {
                    scope = $rootScope.$new();
    
                    $controller('ViewMeetingCtrl', {
                    $scope: scope,
                    meeting : {}  //your custom object
                   }); 
                })); 
    

    请记住,您是在测试中测试控制器而不是路由解析注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 2015-08-11
      • 2018-06-26
      • 1970-01-01
      • 2016-05-28
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多