unit tutorial test run karma e2e unit-testing controller angularjs mocha

unit-testing - tutorial - run test angular



cómo probar controladores creados con angular.module(). controller() en Angular.js usando Mocha (2)

Tengo un controlador creado con angular.module (). Controller () como en esta situación

myModule = angular.module(''myApp.controllers'', []) .controller(''testCtrl'', [''$scope'', function($scope){ $scope.test = ''this is a test''; }]);

ahora, necesito usar mocha para probar si mi controlador está funcionando correctamente. En Angular hay algunos ejemplos cuando los controladores se declaran como funciones globales (por ejemplo, http://docs.angularjs.org/tutorial/step_04 ), por lo que usan

function PhoneListCtrl() {...} ..... beforeEach(function() { scope = {}, ctrl = new PhoneListCtrl(scope); }); it(''shod test whatever PhoneListCtrl does '', function() { expect(scope.someProp).toBe(''whateverValue''); });

Así que las preguntas son:

1) ¿cómo puedo hacer una prueba similar para los controladores que se declaran usando angular.module (). Controller ()

2) Como hacerlo utilizando Mocha.


AngularJS proporciona simulacros que ponen a disposición algunas funciones útiles para la inyección de dependencia durante la prueba.

Ejemplo:

(en jazmín)

Digamos que queremos realizar la primera prueba del tutorial oficial y hemos definido un módulo de controladores. (podría nombrar el nombre del módulo, pero quiero que sea sencillo)

var Controllers = angular.module(''controllers'', []); Controllers.controller(''PhoneListCtrl'', [''$scope'', function($scope){ $scope.phones = [{name: "Nexus S", snippet: "Fast..."}, {name: "Motorola XOOM...", snippet: "The Next...."}, {name: "MOTOROLA XOOM...", snippet: "The Next, Next..."}]; }]);

Luego creamos un módulo para nuestra aplicación y le inyectamos nuestro módulo de controladores.

var PhonesApp = angular.module(''phoneApp'', [''controllers'']);

Finalmente podemos probarlo así.

describe(''phonesApp'', function() { describe(''phoneApp controllers'', function() { beforeEach(module(''controllers'')); describe(''PhoneListCtrl'', function() { it(''should create "phones" model with 3 phones'', inject(function($rootScope, $controller) { var scope = $rootScope.$new(); var ctrl = $controller("PhoneListCtrl", {$scope: scope }); expect(scope.phones.length).toBe(3); })); }); }); });

No lo he hecho en mocha, pero creo que el proceso es similar.

Pd: Hice el tutorial usando CoffeeScript, aquí están los bits relevantes https://gist.github.com/4163147


Si está utilizando mocha, tenga en cuenta que no hay soporte para angular.mock.module o angular.mock.inject menos que haya actualizado a angular-1.1.1. Estoy en el mismo barco, pero no puedo mejorar por otro problema.

Quiero usar mocha, porque mis pruebas del lado del servidor están en mocha, y prefiero tener el mismo marco de prueba en ambos lados, así que estoy en un poco de un lío.

Por lo tanto, si no puede usar inyectar / módulo, puede intentarlo de esta manera:

var $injector = angular.injector([''your-app-name'', ''ng'']), $controller = $injector.get(''$controller''), $scope = $injector.get(''$rootScope''); describe(''my app controllers'', function () { describe(''FooCtrl'', function () { it(''should do something'', function () { // scope can be any object you want; could be $rootScope from above var params = { $scope: { } }, ctrl = $controller(''FooCtrl'', params); // TODO: test ctrl }); }); });