Как использовать переменные 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;
})();
Ответы
Ответ 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");
});
});