unitarias unit test pruebas personalizadas hacer directivas crear como angularjs unit-testing angular-translate angular-filters

angularjs - test - Cómo simular el filtro angular de traducción en pruebas unitarias para directivas



pruebas unitarias angularjs (3)

A continuación se muestra un ejemplo simple de cómo puede burlarse del filtro.

var mockTranslateFilter; beforeEach(function() { module(function($provide) { $provide.value(''translateFilter'', mockTranslateFilter); }); mockTranslateFilter = function(value) { return value; }; });

En mis plantillas directivas, necesito usar el filtro de traducción angular como tal:

<label for="data-source-btn"> <span id="data-source-btn-span"></span> {{''Data Source'' | translate}} </label>

Luego, en mi prueba unitaria para esta directiva, recibo el error:

Proveedor desconocido: translateFilterProvider <- translateFilter

Intenté inyectar $filter y obtener $translate por $translate = $filter(''translate''); que no resuelve el problema, esto es realmente para probar el filtro

Puedo inyectar el módulo pascalprecht.translate , pero eso es mano dura. ¿Cómo me burlo del filtro?


Esta es la forma ES6:

beforeEach(angular.mock.module(''myModule''), ($provide) => { $provide.value(''$translate'', t => ({ then: cb => cb(t) })); }));

Esto no se burla del método $ translate.instant. Para esto, puede asignar la función a una variable y luego asignar el método angular.identity a la propiedad instant .


Esto es trabajo para mí. Pero, por supuesto, debe establecer el valor de mockTraslateFilter para que funcione antes de usarlo en otro funciton.

var mockTranslateFilter; beforeEach(function() { mockTranslateFilter = function(value) { return value; }; module(function($provide) { $provide.value(''translateFilter'', mockTranslateFilter); }); });

aún más corto, si usas ES6:

beforeEach(angular.mock.module(progressBarComponent, ($provide) => { $provide.value(''translateFilter'', (v) => v); }));