2013-09-24 25 views
6

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.

cevap

10

Ayrıca bu tam hatayı alıyorum. Kodumu, bir sağlayıcıyı sınamaya çalıştığım yerde benzerdir, bu yüzden modülü çağırırım ve sağlayıcıyı yapılandıran bir işlevi iletirim.

ÇÖZÜLDÜ:

ben sorunu "açıklamak" yöntemine temsilci dönmek için "enjekte" çağıran kaynaklanmaktadır bulundu. Bir delegeyi yalnızca "it" olarak döndürmek için enjekte edebilirsiniz.

Örneğin

:

describe('something', inject(function(something) {})); // will throw the $module is null error 

Ancak bu çalışır:

it('something', inject(function(something) {})); // works :) 
+0

'()' da 'beforeEach()' çağrılarında kullanılabilir enjekte edilir. –

+2

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. –

İlgili konular