簡體   English   中英

AngularJS和茉莉,測試承諾

[英]Angularjs and jasmine, testing promise

我正在嘗試測試我的控制器,該控制器在啟動服務時將返回包含用戶名的諾言。 它總是失敗,我不明白為什么。

模塊

(function () {
    'use strict';

    angular.module('dilib', [
            // Angular modules
            'ngAnimate',
            'ngRoute',

            // Custom modules
            'dilib.layout',

            // 3rd Party Modules
            'LocalStorageModule',
            'restangular'
    ])
        .config(function (RestangularProvider) {

            RestangularProvider.setBaseUrl('http://localhost/services/webapi/');

        })
        .config(function (localStorageServiceProvider) {

            localStorageServiceProvider.setPrefix('dilib');

        });
})();

控制器

(function () {
    'use strict';

    var controllerId = 'requestAuthorizationController';

    angular
        .module('dilib')
        .controller(controllerId, requestAuthorizationController);

    requestAuthorizationController.$inject = ['requestAuthorizationService'];

    function requestAuthorizationController(requestAuthorizationService) {
        /* jshint validthis:true */
        var vm = this;
        vm.username = undefined;

        activate();

        function activate() {

            return requestAuthorizationService.requestAuthorization().then(function (result) {

                vm.username = result;

                return vm.username;

            });

        }

    }
})();

服務內容

(function() {
  'use strict';

  var serviceId = 'requestAuthorizationService';

  angular
    .module('dilib')
    .service(serviceId, requestAuthorizationService);

  requestAuthorizationService.$inject = ['$q'];

  function requestAuthorizationService($q) {

    //API
    var service = {

      requestAuthorization: requestAuthorization,
    }

    return service;

    /////////////////////////////////////////////////////////////////////

    function requestAuthorization(user) {

      var defer = $q.defer();

      defer.resolve('visitor');

      return defer.promise;
    }

  }
})();

規格

//requestAuthorizationController Specification

'use strict';

describe('requestAuthorizationController Specification', function() {

    var RestangularProvider,
        localStorageServiceProvider,
        controller,
        requestAuthorizationServiceMock,
        $rootScope,
        scope;

    beforeEach(function () {

        angular.module('ngAnimate', []);
        angular.module('ngRoute', []);
        angular.module('dilib.layout', []);
        //angular.module('LocalStorageModule', []);
        angular.module('http-auth-interceptor', []);
        //angular.module('restangular', []);

    });

    beforeEach(function() {

        module('dilib', function(_RestangularProvider_, _localStorageServiceProvider_, $provide) {

            RestangularProvider = _RestangularProvider_;
            localStorageServiceProvider = _localStorageServiceProvider_;

            $provide.service('requestAuthorizationService', function ($q) {
                this.requestAuthorization = jasmine.createSpy('requestAuthorization').and.callFake(function(result) {

                    var defer = $q.defer();
                    defer.resolve('visitor');
                    return defer.promise;

                });
            });

        });

    });

    beforeEach(inject());

    beforeEach(inject(function ($controller, _$rootScope_, requestAuthorizationService) {

        controller = $controller;
        requestAuthorizationServiceMock = requestAuthorizationService;
        $rootScope = _$rootScope_;
        scope = $rootScope.$new();

    }));

    it('Provides the authenticated user name', function() {

        var vm = controller('requestAuthorizationController');
        expect(vm.username).toBe('visitor');

    });

});

這是the

感謝您的任何幫助!

我找到了解決方案。 我忘了叫$ rootScope。$ apply()。 現在看起來像這樣。

it('Provides the authenticated user name', function() {

        var vm = controller('requestAuthorizationController');
        expect(vm.username).toBe('visitor');

    });

是矮人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM