unitarias unit test pruebas karma for unit-testing angularjs jasmine karma-runner

unit testing - unit - Mocking dependencias de módulos angulares en pruebas de unidad Jasmine



pruebas unitarias angular 6 (3)

Intento probar el código del controlador de prueba dentro de un módulo que toma otros módulos como dependencias, pero no he podido averiguar cómo simularlos correctamente.

Estoy usando el Marco Jasmine y ejecutando mis pruebas con Karma (Testacular).

Código de módulo

var app = angular.module(''events'', [''af.widgets'', ''angular-table'']); app.controller(''eventsCtrl'', function([dependencies]){ $scope.events = []; ... });

Código de especificación

describe(''events module'', function(){ var $scope, ctrl; beforeEach(function(){ angular.mock.module(''af.widgets'', []); angular.mock.module(''angular-table'', []); module(''events'', [''af.widgets'', ''angular-table'']); }); beforeEach(inject(function($rootScope, $controller){ $scope = $rootScope.new(); ctrl = $controller(''NameCtrl'', { $scope: $scope, }); })); it(''should have an empty events array'', function(){ expect($scope.events).toBe([]); }) });

El error que recibo es que Karma es "sin módulo af.widgets", así que obviamente no me estoy burlando de las dependencias del módulo. ¿Algún consejo?


Esto es lo que descubrí:

No estaba cargando ningún módulo de ''tabla angular'' en mi archivo karma.conf.js, de ahí el error. Esto fue intencional al principio ya que quería probar el módulo de ''eventos'' sin el módulo de la tabla real.

Pude burlarme fácilmente del módulo ''tabla angular'' creando un nuevo archivo en mi carpeta de prueba llamado ''mocks / angular-table.js'' y agregué el siguiente código:

/mocks/angular-table.js

''use-strict''; angular.module(''angular-table'', []);

Agregué este archivo a mi archivo karma.conf.js, junto con el módulo real de ''eventos'' que quería probar:

karma.conf.js

... files = [ JASMINE, JASMINE_ADAPTER, ''scripts/libs/angular.js'', ''scripts/libs/angular-mocks.js'', ''scripts/events.js'', // this is the real module. ''scripts/mocks/*.js'', //loads all custom mocks. ''scripts/specs/*.spec.js'' // loads my spec file. ] ...

Finalmente, en mi archivo de especificaciones, pude agregar ambos módulos llamándolos por separado en un bloque beforeEach:

specs / events.spec.js

beforeEach(function(){ module(''angular-table''); module(''events''); });

Tengo la idea de estructurar mis archivos de esta manera desde esta publicación



Si desea simular un módulo que declara uno o más servicios, he usado este código:

beforeEach(function(){ module(''moduleToMock''); module(function ($provide) { $provide.value(''yourService'', serviceMock); }); });

Esto es útil si el servicio que desea simular también es un servicio que desea probar en una unidad (en otro jazmín describa). La solución propuesta por fscof está bien, pero no se puede crear una prueba unitaria para el módulo de angular-table .