unit test run karma unit-testing angularjs angular-ui-router

unit-testing - run - unit test angular 5



Unidad de pruebas de la fase de configuraciĆ³n en AngularJS. (3)

Estoy tratando de aprender cómo escribir pruebas unitarias para AngularJS. Comencé por el principio, con

angular.module( ... ).config( ... )

Quiero probar lo que hay dentro de la configuración. Así es como se ven las partes relevantes:

angular.module(''ogApp'', [''ngCookies'',''ui.router'',''ogControllers'',''ogServices'',''ogDirectives'',''ogMetricsData'']) .config([ ''$stateProvider'', ''$locationProvider'', function ($stateProvider, $locationProvider) { $stateProvider. state(''login'', { templateUrl: ''connect.html'' }).state(''addViews'', { templateUrl: ''add-views.html'' }).state(''dashboard'', { templateUrl: ''dashboard.html'' }); $locationProvider. html5Mode(true). hashPrefix(''!''); } ]);

Estoy pensando que la forma más fácil de probar este código es inyectar $stateProvider para $stateProvider y $locationProvider . Luego ejecuta la fase de configuración. Después de eso, afirma cómo deberían verse $stateProvider y $locationProvider .

Si mi razonamiento es correcto, entonces mi problema es que no tengo idea de cómo inyectar esas simulaciones en el módulo y ejecutar su fase de configuración desde una prueba.

¿Podría mostrarme cómo probar este código?


Aquí le indicamos cómo acceder a su proveedor para realizar pruebas unitarias:

describe(''yourProvider'', function () { var provider; // Get the provider beforeEach(module(''app'', function (yourProvider) { // This callback is only called during instantiation provider = yourProvider; }); // Kick off the above function beforeEach(inject(function () {})); it(''does its thing'', function () { expect(provider.someMethod()).toEqual(''your results''); }); });

Todavía no he descubierto una forma realmente sencilla de inyectar un simulacro, pero puedes espiar métodos fácilmente y eso es lo suficientemente cerca. Si necesita que se devuelva un simulacro del método del proveedor de dependencia. $ Get (), también puede hacerlo con otro espía. Este ejemplo ilustra cómo devolver un simulacro y configurar un espía adicional.

describe(''yourProvider'', function () { var dependency, mock, provider; beforeEach(module(''app'', function (dependencyProvider) { dependency = dependencyProvider; mock = jasmine.createSpyObj(''dependency'', [ ''methodsGoHere'' ]); spyOn(dependency, ''methodName''); spyOn(dependency, ''$get'').andReturn(mock); }, function (yourProvider) { provider = yourProvider; }); beforeEach(inject(function () {})); it(''does its thing'', function () { expect(provider.someMethod()).toEqual(''your results''); expect(dependency.methodName).toHaveBeenCalled(); }); it(''returns the mock from $get'', function () { expect(dependency.$get).toBe(mock); }); });


Me gustaría crear una fábrica que apunte a una función ... esa función también se llama dentro de la función de configuración. De esa manera usted puede probar la fábrica de la unidad:

angular.module(''ogApp'', [''ngCookies'',''ui.router'',''ogControllers'',''ogServices'',''ogDirectives'',''ogMetricsData'']); // Configuration factory for unit testing angular.module(''ogApp'') .factory(''configuration'', configuration); configuration.$inject = [''$stateProvider'', ''$locationProvider'']; function configuration($stateProvider, $locationProvider) { return { applyConfig: function () { $stateProvider. state(''login'', { templateUrl: ''connect.html'' }).state(''addViews'', { templateUrl: ''add-views.html'' }).state(''dashboard'', { templateUrl: ''dashboard.html'' }); $locationProvider. html5Mode(true). hashPrefix(''!''); }; } // Call above configuration function from Angular''s config phase angular.module(''ogApp'') .config([ ''$stateProvider'', ''$locationProvider'', function ($stateProvider, $locationProvider) { var config = configuration($stateProvider, $locationProvider); config.applyConfig(); } ]);

Puede probar la configuración de la fábrica e inyectar simulacros como lo haría con cualquier otra fábrica.


Puede utilizar Jasmine''s createSpy y createSpyObj de createSpyObj para crear los servicios simulados y angular-mocks.js para inyectarlos.

Más instrucciones sobre cómo inyectar simulacros aquí: inyectar un simulacro en un servicio AngularJS

En esta prueba que escribí para una directiva mía puedes ver lo siguiente:

  • Línea 9 Incluye simulación angular desde el cdn de google.
  • Línea 19 y 20 Crear un objeto falso rootScope
  • Línea 21 y 22 Crear un servicio falso q
  • Línea 42 Configurar el proveedor para inyectar las falsificaciones en el servicio
  • Línea 48 Cree una instancia del servicio que tiene las falsificaciones (este servicio se inyecta en la directiva bajo prueba)
  • Línea 53 Llame al método que está siendo probado.
  • Línea 55 - 59. Afirmar sobre el estado de las falsificaciones.