AngularJS uygulamamı Jasmine üzerinden Karma yoluyla test etmeye çalışıyorum. benim test İşteJasmine ile Karma'da AngularJS fabrika testi
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'
],
edilir:
(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();
});
});
}));
}());
benim karma.conf.js itibaren
Uncaught TypeError: Cannot read property '$modules' of null
at /Users/benturner/Dropbox/Code/galapagus/app/static/js/angular-mocks.js:1866
: Ben (en azından, bu onlardan sonuncusu) Bu hata alıyorum Yani, yapmaya çalıştığım şey, fabrika servisime alay etmekti ve bir dizi nesnenin döndüğünü ve $ kapsamındaki bir değişkene ayarlandığını kontrol etmektir.
Orada da bir eşzamanlama çağrısı var, bu yüzden run() ve waitsFor() kullanmak zorunda kaldım.
Ben hala bunu karşı test edebilmek için benim $ kapsam enjekte anlıyorum, ve angular-mocks.js şimdi bana bir hata veriyor, ben bunu çözmekten uzaklaşıyorum hissediyorum yakına.
Bunu çeşitli dokümanlar, kılavuzlar ve stackoverflow yanıtlarından birlikte ekledim. Herhangi bir rehberlik? Teşekkürler.
'()' da 'beforeEach()' çağrılarında kullanılabilir enjekte edilir. –
Yani bu çözülmedi. Anlayanların bazıları, tüm farklı belgelerin anlaşılmasını anlamak için neden bunun kafa karıştırıcı olduğunu açıklamalıdır. –