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);
}));