AngularJS和茉莉,测试承诺

安德拉斯·桑伊(AndrasCsanyi)

我正在尝试测试我的控制器,该控制器在启动服务时将返回包含用户名的诺言。它总是失败,我不明白为什么。

模块

(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

感谢您的任何提前帮助!

安德拉斯·桑伊(AndrasCsanyi)

我找到了解决方案。我忘了叫$ rootScope。$ apply()。现在看起来像这样。

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

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

    });

是the子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

angularjs 1和茉莉,服务承诺测试

来自分类Dev

AngularJS茉莉花承诺测试由于超时而失败

来自分类Dev

用茉莉花测试角度承诺

来自分类Dev

茉莉花测试连续的承诺电话

来自分类Dev

定制茉莉花配对和承诺

来自分类Dev

AngularJS中的单元测试-模拟服务和承诺

来自分类Dev

茉莉花承诺的测试控制器

来自分类Dev

如何用茉莉花测试角度承诺

来自分类Dev

茉莉花承诺的测试控制器

来自分类Dev

如何使用茉莉花和angularjs测试我的服务是否返回数据

来自分类Dev

单元测试Angularjs茉莉花

来自分类Dev

AngularJS茉莉花工厂测试与间谍

来自分类Dev

AngularJS茉莉花工厂测试与间谍

来自分类Dev

AngularJS $ locationChangeSuccess的茉莉花测试

来自分类Dev

AngularJS验证和承诺

来自分类Dev

承诺与angularJS和Typescript

来自分类Dev

AngularJS验证和承诺

来自分类Dev

multiCapabilities和茉莉花重点测试

来自分类Dev

在Visual Studio2013中使用茉莉花和Chutzpah进行单元测试angularjs无法正常工作

来自分类Dev

AngularJS,间谍和兑现承诺

来自分类Dev

AngularJS中的单元测试承诺

来自分类Dev

AngularJS:返回$ http的测试工厂承诺

来自分类Dev

AngularJS单元测试解决承诺

来自分类Dev

AngularJS单元测试解决承诺

来自分类Dev

量角器+ AngularJS +茉莉花-测试按住项目

来自分类Dev

茉莉花+ AngularJS:如何测试$ rootScope。$ broadcast与参数调用?

来自分类Dev

Angularjs茉莉花测试:使用$ backend进行api调用

来自分类Dev

angularjs单元测试因果茉莉困境的业力

来自分类Dev

AngularJS Karma茉莉花测试指令由于$ compile而失败?