web-dev-qa-db-fra.com

Erreur: [$ injector: unf] Fournisseur inconnu: dans le test de service AngularJS

J'ai beaucoup de mal à obtenir des dépendances correctement fournies pour un service AngularJS.

Je vois un certain nombre d'autres messages avec des erreurs similaires ici sur StackOverflow mais aucun d'entre eux ne semble résoudre le problème.

Voici le code de l'application:

cm.modules.app = angular.module('myApp', ['ngRoute', 'ngAnimate']);
myServiceName = function($http) {
    // do stuff
};
myServiceName.prototype.value = 1;

cm.modules.app.service('defaultAlertFactoryA', myServiceName);

Voici le code de test:

describe('test alertFactoryA', function() {
  var $provide;
  var mAlertFactoryA;

  beforeEach(module(cm.modules.app));

  beforeEach(angular.mock.module(function(_$provide_) {
    $provide = _$provide_;
  }));

  beforeEach(function() {
    inject(function($injector) {
      mAlertFactoryA = $injector.get('defaultAlertFactoryA');
    });
  });

  it('should work', function() {
    expect(true).toBe(true);
  });
});

Voici l'erreur:

Erreur: [$ injector: impr] Fournisseur inconnu: defaultAlertFactoryAProvider <- defaultAlertFactoryA http://errors.angularjs.org/1.2.0-rc.2/ $ injector/impr? P0 = defaultAlertFactoryAProvider% 20 % 3C-% 20defaultAlertFactoryA

Question: Comment puis-je résoudre ce problème afin que le test réussisse?

29
eb80

Voici ce que j'ai utilisé pour le faire fonctionner (enfin)

 beforeEach(function() {
    module(cm.modules.app.name);

    module(function($provide) {
      $provide.service('defaultAlertFactoryA', myServiceName);
    });

    inject(function($injector) {
      defaultAlertFactory = $injector.get('defaultAlertFactoryA');
    });
 });
18
eb80

Afin de bootstrap votre module, vous devez fournir son nom

beforeEach(module('myApp'));

Démo

26
Eitan Peer

On dirait que vous devez inclure les fichiers de service dans votre fichier karma.conf.js

files: [

  'app/bower_components/angular/angular.js',
  'app/bower_components/angular-mocks/angular-mocks.js',
  'app/bower_components/angular-ui-router/release/angular-ui-router.js',
  'app/app.js',
  'app/controllers/*.js',
  'app/services/*.js',
  'tests/**/*.js'
],

Si elles ne sont pas incluses ici, elles ne sont pas accessibles dans les tests unitaires

11
Dave Keane