Pregunta

Estoy teniendo algunos problemas con mi karma pruebas.

Tengo este servicio que funciona bien, en que me inyecto una constante CSRF_TOKEN :

'use strict';

angular.module('App').factory("AuthenticationService", function($http,    $sanitize, SessionService, FlashService, CSRF_TOKEN) {

   var sanitizeCredentials = function(credentials) {
       return {
           email: $sanitize(credentials.email),
           password: $sanitize(credentials.password),
           csrf_token: CSRF_TOKEN
       };
   };
...

Pero cuando se ejecuta grunt test comando, el Karma del error es :

Error: [$injector:unpr] Unknown provider: CSRF_TOKENProvider <- CSRF_TOKEN <- AuthenticationService

ACTUALIZACIÓN Mi Karma.conf :

// Karma configuration
// http://karma-runner.github.io/0.10/config/configuration-file.html

module.exports = function(config) {
  config.set({
    // base path, that will be used to resolve files and exclude
    basePath: '',

    // testing framework to use (jasmine/mocha/qunit/...)
    frameworks: ['jasmine'],

    // list of files / patterns to load in the browser
    files: [
      'app/bower_components/angular/angular.js',
      'app/bower_components/jquery/dist/jquery.js',
      'app/bower_components/angular-mocks/angular-mocks.js',
      'app/bower_components/angular-resource/angular-resource.js',
      'app/bower_components/angular-cookies/angular-cookies.js',
      'app/bower_components/angular-sanitize/angular-sanitize.js',
      'app/bower_components/angular-route/angular-route.js',
      'app/bower_components/xdomain/dist/0.6/xdomain.js',
      'app/bower_components/sass-bootstrap/dist/js/bootstrap.js',
      'app/bower_components/angular-bootstrap/ui-bootstrap-tpls.js',
      'app/scripts/*.js',
      'app/scripts/**/*.js',
      'test/mock/**/*.js',
      'test/spec/**/*.js'
    ],

    // list of files / patterns to exclude
    exclude: [],

    // web server port
    port: 8080,

    // level of logging
    // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: false,


    browsers: ['Chrome'],


    // Continuous Integration mode
    // if true, it capture browsers, run tests and exit
    singleRun: false
  });
};

Y mi constante definida en un bootstrap.js archivo de crear instancias de ella antes de que la aplicación se inicia :

'use strict';

angular.element(document).ready(function(){
    var app = angular.module('App');
    var $injector = angular.injector(['ng']);
    $injector.invoke(function($http, $rootScope) {
        $rootScope.$apply(function() {
            $http.get("http://something/token").then(function(response) {
                app.constant("CSRF_TOKEN", response.data.csrf_token);
                angular.bootstrap(document, ['App']);
            });
        });
    });
});

¿Sabe usted la solución para que el Karma dejar de pensar en mi constante es un proveedor?

¿Fue útil?

Solución

Se las costuras como documento listo evento nunca está tirado en el jazmín de la prueba y, por tanto, una constante no está definido en su App el módulo.Trate de burlarse de CSRF_TOKEN constante en su módulo de sección de configuración de la prueba:

JavaScript

describe('Test', function() {

  beforeEach(function() {
    module('App', function($provide) {
      $provide.constant('CSRF_TOKEN', 'MOCK_CONSTANT'); // <= mock your constant
    });
  });

  // Tests go here

});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top