2014-09-10 39 views
5
hata veriyor

Spotify için oluşturduğum bir AngularJS hizmeti için jasmine ile bazı testler yapmaya çalışıyorum. Ancak, sözlerimi test ederken testlerimde hata yapmaya devam ediyorum.

Testim böyle şu anda:

describe('Spotify.search', function() { 
    var $httpBackend; 
    var $rootScope; 
    var Spotify; 
    var api = 'https://api.spotify.com/v1'; 

    beforeEach(inject(function(_Spotify_, _$httpBackend_, _$rootScope_) { 
    Spotify = _Spotify_; 
    $httpBackend = _$httpBackend_; 
    $rootScope = _$rootScope_; 
    jasmine.getJSONFixtures().fixturesPath='base/test/mock'; 
    })); 

    it('should return an array of artists', function() { 
    $httpBackend.when('GET', api + '/search?q=Nirvana&type=artist').respond(
     getJSONFixture('search.artist.json') 
    ); 

    Spotify.search('Nirvana', 'artist').then(function (data) { 
     expect(data).toBeDefined(); 
     expect(data.artists.items.length).toBeGreaterThan(0); 
    }); 

    $httpBackend.flush(); //This line causes the error 
    }); 
}); 

ve çıkar hatayı geçerli:

✗ should return an array of artists 
TypeError: 'undefined' is not a function (evaluating '$browser.$$checkUrlChange()') 
    at /Users/XXXX/Work/angular-spotify/bower_components/angular/angular.js:12502 
    at /Users/XXXX/Work/angular-spotify/bower_components/angular-mocks/angular-mocks.js:1438 
    at /Users/XXXX/Work/angular-spotify/test/spec/angular-spotify.spec.js:249 

Hat 249 olan httpBackend.flush()

kullanıyorum $ PhantomJS ile karma-yasemin ve koşu testleri.

  • angularjs: 1.2.24
  • açısal-mocks: 1.2.16
  • açısal-senaryo: 1.2.16
  • karma-yasemin: 0.2.0

Neden, $ olur httpBackend tarayıcıdaki URL’yi değiştirmeye mi çalışıyor?

Bu konuda herhangi bir yardım harika olurdu.

cevap

7

Sorun, Açısal ve Açısal-Ayraçlar arasındaki sürüm uyuşmazlığınızdır. Bu çizgi Eğik-Mocks son zamanlarda eklendi: Bu değişikliğin her iki projelerde henüz mevcut değil nerede 1.2.22 için Açısal ve Açısal-dalga geçer hem iterek çözeriz diye

https://github.com/angular/angular.js/blob/v1.2.24/src/ngMock/angular-mocks.js#L59

. Ama her ikisi için de 1.2.24 sanırım işe yarayacak.

+0

Haklısın haha. Bu açısal ve açısal-alay arasında sadece bir versiyon missmatch oldu. –

+0

harika cevap! Teşekkürler. – Rocco

0

Yıkama yöntemi, alaylı httpBackend uygulamasının bir parçasıdır.

Bkz:

https://github.com/angular/angular.js/blob/master/src/ngMock/angular-mocks.js#L1823

Eğer bağımlılıkları 'ngMockE2E' enjekte etmek gerek HttpBackend bu uygulama kullanın.

+0

Ben zaten angular-mocks.js karma yapılandırma dosyasına enjekte ediyorum. Daha önceki jasmine sürümleriyle çalışıyordu, şimdi çalışmıyor. –

+0

Bu yeterli değil, API son zamanlarda değişti ve şimdi passThrough veya floş kullanmak için ngMockE2E enjekte etmeniz gerekiyor. Bir bileşen enjeksiyonu ve yeni bir dosya bağımlılığı değil. Aslında, ngMock2E2 sahte dosyanın bir parçasıdır. – benek