37 votes

Tests unitaires du contrôleur AngularJS - services d’injection

Un espoir question simple sur AngularJS des tests unitaires. J'ai un contrôleur à l'aide d'un simple service (adapté angulaires-projet de semences)

services.js:

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

controllers.js:

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

Cela fonctionne très bien im mon application. Cependant, j'ai du mal à créer le contrôleur de l'unité de test de cadre de travail. Je ne peux pas comprendre notre façon d'injecter "version" de service (ou de créer une instance) et de le passer à $controller() de l'usine - je suppose que c'est ce que je veux faire?! Voici le squelette 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');
});

L'exécution de l'atelier de test, on obtient: >test.sh

... a échoué (3.00 ms): Erreur: Erreur: Unknown fournisseur de: versionProvider <- version Erreur: Inconnu fournisseur de: versionProvider <- version

J'ai essayé différentes choses avec $injecteur/$fournisseur et le module (), mais en vain. Je suis sûr que la réponse est simple, mais je ne peux pas le voir.

57voto

Igor Minar Points 6465

ajoutez simplement beforeEach(module('myApp.services')) à votre bloc décrit. Ceci chargera le module de services avec le service "version" dans l'injecteur de test et le mettra à la disposition de votre test.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X