2012-05-11 20 views
37

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.

Respuesta

57

simplemente agregue beforeEach(module('myApp.services')) a su bloque de describir. Esto cargará el módulo de servicios con el servicio "versión" en el inyector de prueba y eso lo pondrá a disposición de su prueba.

+0

¡Gracias! Eso fue simple. No se me ocurrió tener dos llamadas BeforeEach() - interesante. – iceberg

+30

iceberg, por favor márquelo como la respuesta aceptada si resuelve el problema. –

+1

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? –

Cuestiones relacionadas