Подтвердить что ты не робот

Как использовать переменные scope с синтаксисом "Контроллер как" в Jasmine?

Я использую жасмин для тестирования angularJS. В моих представлениях я использую синтаксис "Контроллер как":

<div ng-controller="configCtrl as config">
    <div> {{ config.status }} </div>
</div>

Как я могу использовать эти переменные "scope" в жасмине? Что означает "Контроллер как"? Мой тест выглядит следующим образом:

describe('ConfigCtrl', function(){
    var scope;

    beforeEach(angular.mock.module('busybee'));
    beforeEach(angular.mock.inject(function($rootScope){
        scope = $rootScope.$new();

        $controller('configCtrl', {$scope: scope});
    }));

    it('should have text = "any"', function(){
        expect(scope.status).toBe("any");
    });
}); 

Вызов scope.status завершается, с ошибкой:

Expected undefined to be "any".

UPDATE: контроллер (скомпилированный javascript из TypeScript) выглядит следующим образом:

var ConfigCtrl = (function () {
    function ConfigCtrl($scope) {
        this.status = "any";
    }
    ConfigCtrl.$inject = ['$scope'];
    return ConfigCtrl;
})();
4b9b3361

Ответ 1

Решение заключается в использовании синтаксиса "контроллер как" при создании экземпляра вашего контроллера в вашем тесте. В частности:

$controller (' configCtrl как config', {$ scope: scope});

ожидать (scope.config.status) Тобе ( "любой" );.

Далее следует передать:

describe('ConfigCtrl', function(){
    var scope;

    beforeEach(angular.mock.module('busybee'));
    beforeEach(angular.mock.inject(function($controller,$rootScope){
        scope = $rootScope.$new();

        $controller('configCtrl as config', {$scope: scope});
    }));

    it('should have text = "any"', function(){
        expect(scope.config.status).toBe("any");
    });
}); 

Ответ 2

Когда мы используем синтаксис controller as, в наш тест не нужно вводить $rootScope. Следующее должно работать нормально.

describe('ConfigCtrl', function(){
    beforeEach(module('busybee'));

    var ctrl;

    beforeEach(inject(function($controller){
        ctrl = $controller('ConfigCtrl');
    }));

    it('should have text = "any"', function(){
         expect(ctrl.status).toBe("any");
    });
});