Una pregunta con suerte simple acerca de la prueba de unidad AngularJS. Tengo un controlador usando un servicio sencillo (adaptado de proyecto angular de la semilla)Pruebas de unidad de controlador AngularJS - servicios de inyección
services.js:
angular.module('myApp.services', []).value('version', '0.1');
controllers.js:
function MyCtrl1($s, version) {
$s.version = version;
}
MyCtrl1.$inject = ["$scope","version"];
Esto funciona muy bien im mi aplicación Sin embargo, tengo problemas para crear el controlador en el trabajo del marco de prueba de la unidad. No puedo entender cómo inyectar el servicio de 'versión' (o crear una instancia) y pasarlo a la fábrica de $ controller(). ¡Supongo que eso es lo que quiero hacer! Aquí está el esqueleto de especificaciones:
controllerSpec.js:
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
// how about version service?
ctrl = $controller(MyCtrl1, {$scope: scope, /* version: <where from?> */});
}));
it('Version should be 0.1 ...', function() {
expect(scope.version).toBe('0.1');
});
Ejecución de los rendimientos del arnés de prueba: > test.sh
... fallado (3,00 ms): Error: Error: Proveedor desconocido: versionProvider < - versión Error: Proveedor desconocido: versionProvider < - versión
He intentado varias cosas con $ injector/$ provider y module() pero fue en vano. Estoy seguro de que la respuesta es simple, pero no puedo verlo.
¡Gracias! Eso fue simple. No se me ocurrió tener dos llamadas BeforeEach() - interesante. – iceberg
iceberg, por favor márquelo como la respuesta aceptada si resuelve el problema. –
Por cierto, ¿es una buena práctica escribir pruebas unitarias para un controlador con dependencia del servicio? ¿O es mejor crear el simulacro para el servicio y luego escribir una prueba para el controlador y otra para el servicio? –