Desconocido del proveedor de error de tiro cuando la inyección constante
-
23-12-2019 - |
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?
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