unit tutorial test karma and angularjs jasmine

angularjs - test - karma jasmine tutorial



¿Cómo usar las variables de alcance con la sintaxis de “Controlador como” en Jasmine? (2)

Estoy usando jazmín para pruebas angulares. En mi opinión, estoy usando la sintaxis de "Controlador como":

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

¿Cómo puedo usar estas variables de "alcance" en jazmín? ¿A qué se refiere el "Controlador como"? Mi prueba se parece a la siguiente:

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"); }); });

Llamar a scope.status termina, seguro, con el error:

Expected undefined to be "any".

ACTUALIZACIÓN : El controlador (javascript compilado de TypeScript) tiene este aspecto:

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


Cuando estamos usando el controller as sintaxis, no debería haber necesidad de inyectar $ rootScope en nuestra prueba. Lo siguiente debería funcionar bien.

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"); }); });


La solución es usar la sintaxis de "controlador como" al crear una instancia de su controlador en su prueba. Específicamente:

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

expect ( scope.config.status ) .toBe ("cualquiera");

Lo siguiente debería pasar ahora:

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"); }); });