unit test karma javascript angularjs jasmine karma-runner

javascript - karma - test jasmine angular 2



¿Cómo creo un ayudante para Jasmine/Angular para combinar múltiples antes de cada (1)

Puede crear funciones globales beforeEach () escribiéndolas fuera del contexto de una función de descripción específica. Debe crear una clase spec-helper.js con estas funciones y cargarla a través de la configuración de Karma.

Tenga en cuenta que las funciones beforeEach se ejecutarán antes que cualquier función que esté ejecutando (ya que son globales).

fiddle un fiddle para demostrar, sin embargo, la clave con Karma es agregar el archivo a la configuración para que el navegador lo cargue.

Ayudante de especificaciones:

var myGlobal; beforeEach(function() { // This will run before any it function. // Resetting a global state so the change in this function is testable myGlobal = 10 });

Banco de pruebas:

describe(''first suite'', function(){ it(''is a test'', function(){ expect(myGlobal).toBe(10); // Reset the value to show that beforeEach is executed for each it function myGlobal = 20; expect(myGlobal).toBe(20); }); it(''is another test'', function($location){ expect(myGlobal).toBe(10); myGlobal = 20; expect(myGlobal).toBe(20); }); });

Sigo repitiendo algo de código en mi archivo de especificaciones que inyecta una plantilla y luego la compila. Extraje este código en una función auxiliar para mantener las cosas en seco. Creo que el problema está en tratar de ubicar antes de cada beforeEach en una función de ayuda. Aquí está la parte de mi código que estoy tratando de abstraer en una función:

beforeEach(module(''app/views/header.html'')); beforeEach(inject(function($templateCache, $compile, $rootScope) { template = $templateCache.get(''app/views/header.html''); $templateCache.put(''views/header.html'', template); var directive = angular.element(''<clinical-header></clinical-header>''); element = $compile(directive)($rootScope); $rootScope.$digest(); }));

Aquí está la función de ayuda que he creado:

var setupTemplate = function(templateName, element) { beforeEach(module(''app/views/'' + templateName)); beforeEach(inject(function($templateCache, $compile, $rootScope) { var template = $templateCache.get(''app/views/'' + templateName); $templateCache.put(''views/'' + templateName, template); var directive = angular.element(element); element = $compile(directive)($rootScope); $rootScope.$digest(); }));

Y ahora esta es la llamada a la función auxiliar:

setupTemplate(''header.html'', ''<clinical-header></clinical-header>'');

Al final de mi función de ayuda, todo se ve bien, pero cuando salto a mi bloque it , todo está indefinido. ¿Puedo extraer múltiples beforeEach de cada uno? ¿Cuál es la forma correcta de hacer esto? Además, ¿dónde está el lugar adecuado para poner las funciones de jasmine helper y cómo se hace?