Le Test d'unité d'injection de dépendance
Je suis nouvelle marque de jasmin et de karma. Je crois que j'ai la configuration de l'environnement correctement et je suis capable de courir très de base des tests unitaires, mais dès que j'essaie d'instancier un contrôleur je me suis donné un inconnu fournisseur d'erreur et je ne sais pas comment déboguer. Ai-je besoin de passer dans un stateProvider dépendance? Je ne vois pas cela dans l'angle de graines exemple.
De verdure.json:
{
"name": "starter",
"description": "A starter project for AngularJS",
"version": "2.0.0",
"homepage": "https://starter.com",
"private": true,
"dependencies": {
"angular": "1.2.x",
"angular-route": "1.2.x",
"angular-loader": "1.2.x",
"angular-mocks": "~1.2.15"
}
}
Maison De Contrôleur:
angular.module('home').controller('Home', function($scope, $rootScope, $state) {
console.log($scope.pageType);
$rootScope.pageType = 'home';
/*
* Takes in a state and transitions the app to that state.
*/
$scope.goTo = function(value) {
$state.transitionTo(value);
}
/*
* Handles what happens after clicking log-in
*/
$scope.loginClicked = function() {
$state.transitionTo('log-in');
}
});
Fichier de Test:
'use strict';
/* jasmine specs for controllers go here */
describe('Home', function() {
beforeEach(module('home'));
it('should run tests', inject(function() {
expect(null).toBeDefined();
}));
it('should not say true equals false', function() {
expect(false).not.toBe(true);
});
it('should say true equals true', function() {
expect(true).toBe(true);
});
it('should say false does not equal true', function() {
expect(false).not.toBe(true);
});
it('should create "phones" model with 3 phones', inject(function($controller,$rootScope) {
/*
*
* COMMENTING OUT THESE LINES = PASS
*
*/
var scope = $rootScope.$new(),
ctrl = $controller('Home', {$scope:scope});
expect(ctrl).not.toBe(null);
}));
});
Erreur:
Error: [$injector:unpr] Unknown provider: $stateProvider <- $state
http://errors.angularjs.org/1.2.16/$injector/unpr?p0=%24stateProvider%20%3C-%20%24state
at /Users/jlett/bower_components/angular/angular.js:78:12
at /Users/jlett/bower_components/angular/angular.js:3705:19
at Object.getService [as get] (/Users/jlett/bower_components/angular/angular.js:3832:39)
at /Users/jlett/bower_components/angular/angular.js:3710:45
at getService (/Users/jlett/bower_components/angular/angular.js:3832:39)
at invoke (/Users/jlett/bower_components/angular/angular.js:3859:13)
at Object.instantiate (/Users/jlett/bower_components/angular/angular.js:3880:23)
at /Users/jlett/bower_components/angular/angular.js:7134:28
at null.<anonymous> (/Users/jlett/test/unit/home-controller_tests.js:26:20)
at Object.invoke (/Users/jlett/bower_components/angular/angular.js:3869:17)
Error: Declaration Location
at window.inject.angular.mock.inject (/Users/jlett/bower_components/angular-mocks/angular-mocks.js:2132:25)
at null.<anonymous> (/Users/jlett/test/unit/home-controller_tests.js:24:54)
at /Users/jlett/zoetis-rimadyl-mobile/test/unit/home-controller_tests.js:5:1
Est-il possible que vous êtes en quelque sorte de ne pas y compris les angular-ui-router dans votre karma config? En fait, je ne vois pas ça dans votre bower.json. Êtes-vous y compris l'interface utilisateur du routeur??
OriginalL'auteur jeffctown | 2014-04-23
Vous devez vous connecter pour publier un commentaire.
Vous obtiendrez ce message d'erreur si l'un des produits injectables module n'est pas inclus.
Par exemple, vous avez
Si votre
$state
dépendance n'est pas dans lehome
module, vous aurez besoin d'inclure ce module. Je ne suis pas familier avec$state
(je pense que c'est angulaires-l'interface du routeur? Seulement angular.js les services sont censés commencer avec$
). Si il angulaire de l'interface utilisateur, c'est la façon dont vous devriez d'installation:De cette façon, angulaire du test runner sait ce que les modules sont nécessaires à l'exécution de vos tests.
Vraiment, l'inclusion de la
home
module doit le faire pour vous aussi longtemps que vous avez leui.router
dépendance définie comme une dépendance de ce module. Si vous avez configuré correctement, vous devrez peut-être regarder l'ordre de vos fichiers inclus pour vos tests. Par exemple, assurez-vous que l'interface utilisateur du routeur fichier est inclus pour vos tests et qu'il est référencé avant votrehome
module de karma config.OriginalL'auteur Jim Schubert
Que vous êtes, y compris la
$state
de la dépendance dans votre contrôleur, vous devez fournir les$state
dans le contrôleur de test de l'unité.Votre bloc avec les changements....
Cependant, lors de la configuration de mes tests unitaires j'aime créer de la fonction de contrôleur d'installation comme je l'ai décrit dans cette configuration ici.
OriginalL'auteur Sten Muchow