2012-05-11 17 views
37

Una domanda che si spera semplice sul test dell'unità AngularJS. Ho un controller utilizzando un semplice servizio (adattato dal progetto angolare seme)Test dell'unità di controllo AngularJS - servizi di iniezione

services.js:

angular.module('myApp.services', []).value('version', '0.1'); 

controllers.js:

function MyCtrl1($s, version) { 
    $s.version = version; 
} 
MyCtrl1.$inject = ["$scope","version"]; 

Questa grande opera im la mia app. Tuttavia, ho difficoltà a creare il controller nel lavoro di frame test unitario. Non riesco a capire come iniettare il servizio 'version' (o creare un'istanza) e passarlo a $ controller() factory - presumo che sia quello che voglio fare ?! Ecco l'ossatura spec:

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

in corso i rendimenti test harness: > test.sh

... non riuscita (3,00 ms): Errore: Errore: provider sconosciuto: versionProvider < - versione Errore: provider sconosciuto: versionProvider - versione

Ho provato varie cose con $ injector/$ provider e module() ma senza risultato. Sono sicuro che la risposta è semplice, ma non riesco a vederlo.

risposta

57

aggiungi semplicemente beforeEach(module('myApp.services')) al blocco descrittivo. Questo caricherà il modulo dei servizi con il servizio "versione" nell'iniettore di test e lo renderà disponibile per il test.

+0

Grazie! E 'stato semplice Non mi è venuto in mente di avere due chiamate beforeEach() interessanti. – iceberg

+30

iceberg, contrassegnarlo come risposta accettata se ha risolto il problema. –

+1

A proposito, è una buona pratica scrivere test di unità per un controller con una dipendenza dal servizio? Oppure è meglio creare il mock per il servizio, e quindi scrivere un test per il controller e uno per il servizio? –

Problemi correlati