Próbuję przetestować moją aplikację AngularJS z Jasmine przez Karmę. I ten błąd (przynajmniej, jest to ostatni z nich):Testowanie fabryczne AngularJS w karmie z Jasmine
Uncaught TypeError: Cannot read property '$modules' of null
at /Users/benturner/Dropbox/Code/galapagus/app/static/js/angular-mocks.js:1866
Z moich karma.conf.js:
files: [
'static/js/jquery.min.js',
'static/js/angular.min.js',
'static/js/angular-mocks.js',
'static/js/angular-resource.min.js',
'static/js/angular-scenario.js',
'static/js/angular-loader.min.js',
'static/js/momentous/ctrl_main.js', // contains all my app's code
'test/momentous.js'
],
Oto moja próba:
(function() {
"use strict";
var controller = null;
var scope = null;
describe("Services", inject(function($rootScope, Moments) {
var mockedFactory, moments, flag, spy;
moments = [{name: 'test'}];
beforeEach(module('momentous', function($provide) {
scope = $rootScope.$new();
$provide.value('$rootScope', scope);
mockedFactory = {
getList: function() {
return moments;
}
};
spy = jasmine.createSpy(mockedFactory.getList);
$provide.value('Moments', mockedFactory);
}));
it('should return moments from the factory service', function() {
runs(function() {
console.log(scope.getList);
flag = false;
setTimeout(function() {
scope.getList();
flag = true;
}, 500);
});
waitsFor(function() {
return flag;
}, "The call is done", 750);
runs(function() {
expect(scope.moments).toEqual([{name: 'test'}]);
expect(spy).toHaveBeenCalled();
});
});
}));
}());
Więc próbuję zrobić to kpić z mojej usługi fabrycznej i sprawdzić, czy zwraca ona tablicę obiektów i ustawia je w zmiennej w polu $ scope.
Jest tam również połączenie asynchroniczne, więc musiałem użyć run() i waitFor().
Nadal nie rozumiem, w jaki sposób wstrzykiwam mój $ scope, tak, że mogę testować przeciwko niemu, a dzięki angular-mocks.js teraz daje mi błąd, czuję, że jestem coraz dalej od rozwiązania tego, nie bliższy.
Zrobiłem to razem z różnych dokumentów, poradników i odpowiedzi na pytanie o stackoverflow. Jakieś wskazówki? Dzięki.
'wstrzykują()' może być również używany w 'beforeEach()' połączeń. –
To nie jest rozwiązane. Niektórzy, którzy rozumieją, powinni wyjaśniać, dlaczego przechodzenie przez różne dokumenty, aby to zrozumieć, jest mylące. –