2014-09-10 17 views
5

Próbuję wykonać kilka testów jaśminem dla usługi AngularJS, którą utworzyłem dla Spotify. Ale ciągle dostaję błąd z moimi testami, gdy test obiecuje.

Mój test jest obecnie tak:

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 
    }); 
}); 

i błąd, że wychodzi to:

✗ 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 

Linia 249 jest $ httpBackend.flush()

używam karma-jaśmin i przeprowadzanie testów przez PhantomJS.

  • angularjs: 1.2.24
  • kątowe-drwi: 1.2.16
  • kątowe-scenariusz: 1.2.16
  • karma-jaśmin: 0.2.0

Dlaczego $ httpBackend próbuje zmienić adres URL w przeglądarce?

Każda pomoc w tej sprawie byłaby świetna.

Odpowiedz

7

Problem stanowi niezgodność wersji między próbami kątowymi i kątowymi. Ta linia została dodana ostatnio w skośnych Mocks:

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

mogę rozwiązać ten problem poprzez wciśnięcie obu kątowa i skośnych Mocks do 1.2.22 gdzie ta zmiana nie jest jeszcze obecny w obu projektach. Ale myślę, że 1.2.24 dla obu również zadziała.

+0

Masz rację haha. To była tylko wersja wymyślona przez kątowe i kątowe makiety. –

+0

świetna odpowiedź! dzięki. – Rocco

0

Metoda płukania jest częścią wyśmiewanej implementacji httpBack.

Patrz:

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

Aby skorzystać z tej realizacji HttpBackend trzeba wstrzyknąć 'ngMockE2E' w swoich zależności.

+0

Wstrzykuję plik mocks.js do pliku konfiguracyjnego karmy. Kiedyś pracował z poprzednimi wersjami jaśminu itp. Teraz to nie działa. –

+0

Nie jest to wystarczające, interfejs API niedawno się zmienił, a teraz, aby używać passThrough lub flush, należy wstrzyknąć ngMockE2E. Jest to wtrysk komponentu, a nie nowa zależność od pliku. W rzeczywistości ngMock2E2 jest częścią fałszywego pliku. – benek

Powiązane problemy