Karma tests scheint nicht zu laden meinem Angularjs controller
Ich mein Winkel-tests mit karma, meine Anwendung läuft im browser, aber tests fehlschlägt, und ich bin zu Ahnen, falsche Einstellungen.
Hier sind der Controller und tests :
//app/scripts/controllers/main.js
'use strict';
angular.module('GloubiBoulgaClientApp')
.controller('MainCtrl', function ($scope) {
});
Hier ist die test Datei :
'use strict';
describe('Controller: MainCtrl', function () {
//load the controller's module
beforeEach(module('GloubiBoulgaClientApp'));
var MainCtrl,
scope;
//Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function () {
expect(true).toBe(true);
});
});
Karma conf
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/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/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: true,
//Start these browsers, currently available:
//- Chrome
//- ChromeCanary
//- Firefox
//- Opera
//- Safari (only Mac)
//- PhantomJS
//- IE (only Windows)
browsers: ['PhantomJS'],
//Continuous Integration mode
//if true, it capture browsers, run tests and exit
singleRun: false
});
};
Den Fehler, Ausgang
PhantomJS 1.9.2 (Linux) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED
Error: [ng:areq] Argument 'MainCtrl' is not a function, got undefined
http://errors.angularjs.org/1.2.8-build.2094+sha.b6c42d5/ng/areq?p0=MainCtrl&p1=not%20a%20function%2C%20got% 2
0undefined
at assertArg (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angula
r.js:1362)
at assertArgFn (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angu
lar.js:1373)
at --obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angular.js:6763
at --obfuscated-path--GloubiBoulga/GloubiBoulgaClient/test/spec/controllers/main.js:15
at invoke (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular/angular.j
s:3704)
at workFn (--obfuscated-path--GloubiBoulga/GloubiBoulgaClient/app/bower_components/angular-mocks/angular -mocks.js:2120)
Frage ich mich, warum dies geschehen, habe ich versucht zu finden, einige Dokumentation über das karma-Initialisierung mit angularjs. Aber die meisten Unterlagen, die ich gefunden, die ist nur dummy-tutorial, die Wiederholung der gleichen Muster ( wie die dummy-todo-Liste, aber mit Handys ... )
Es scheint, dass $controllerProvide.registrieren Sie sich nicht auflösen kann, mein Controller-Namen.
Aber die Richtlinien sind die tests korrekt funktioniert ...
Vielen Dank für Ihre Aufmerksamkeit.
Bearbeiten Notizen : ersetzt habe ich den controller PersonCtrl von MainCtrl in diesem thread, weil Es war verwirrend, die Menschen über, wo Sie zu suchen. Jetzt MainCtrl ist die einfachste scheitern Beispiel, das ich gefunden.
Dieses Problem betrifft nur meinen Controller, ( alle von Ihnen ), aber tests für Dienste und Richtlinien arbeiten wie erwartet
- Versuch : verschieben der variable
Person
ausbeforeEach()
, weil ModulPerson
sollte definiert werden, ersten - Gerade bearbeitete code. Wie Sie sehen können, ist das Problem immer noch das gleiche.
- Ich habe die Beispiel. Und wirklich dummy-code, um missleading
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich mein problem gelöst, ich habe fast eine Woche auf der Abbildung, warum das nicht funktioniert.
Möchte ich Sie warnen, dass Karma Stacktrace-und Fehler-reports, auch im debug-Modus wurden nicht angezeigt hinweisen und waren vor allem missleading.
Ich habe die Zeit in der javascript-debugger springen von frame zu frame, um zu verstehen, warum meine Controller, wo nicht geladen. ( Inspektion Eckigen Controller in register, gezeigt, dass es leer war)
Beim Graben in meinem Verzeichnisse habe ich gefunden *.js, die wurden nicht geladen, der index in der Produktion, sondern durch das globbing-Muster in tests.
Es war mein Alter http_interceptor Dienst, den ich verschoben, aber nicht zerstört die Datei.
Entfernen Sie dieses buggy-Datei behoben, der seltsame Karma/Jasmin/Winkel Verhalten.
Lektion gelernt :
Vertrauen Sie nicht die tests ausgegeben ( aber was sollte ich Vertrauen dann ? ).
Entfernen Sie Dateien, die Sie nicht verwenden/testen.
Dank an alle, die tryied um dieses Problem zu lösen.
ich denke, das Hauptproblem ist aus der karma conf :
entfernen * und die Angabe von Dateien in der richtigen Reihenfolge, denn wenn man geladen wird, bevor ein anderer es kann brechen.
Bearbeiten : Fügen Sie Ihre Dateien in der gleichen Reihenfolge wie Ihre index.html
suchen auf diesem Frage ich mich, ob die Fehlermeldung ist verwirrend Dinge.
in der stack-trace, ich kann sehen,
und aus dem Beispiel scheint es, als ob Sie noch nicht definiert alle Eigenschaften, die auf dem Umfang in Ihre controller.
hast du immer noch das problem, wenn Sie hinzufügen
Ihrem controller?
Wenn Sie über die neueste eckige und auch das angular-route-Modul, sollten Sie auch die angular-route Skript in der karma-conf-Datei zu:
Ich hatte dieses problem und hinzufügen, um die karma-Datei hat den trick.