2014-09-10 3 views
5

Я пытаюсь провести некоторое тестирование с жасмином для службы AngularJS, которую я создавал для Spotify. Но я испытываю ошибку при тестировании при тестировании обещаний.

Мой тест в настоящее время, как это:

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

и ошибка, которая выходит это:

✗ 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 

Линия 249 $ httpBackend.flush()

Я использую карма-жасмин и тесты с помощью PhantomJS.

  • AngularJS: 1.2.24
  • угловой иронизирует: 1.2.16
  • угловой сценарий: 1.2.16
  • карма-жасмин: 0.2.0

Почему бы $ httpBackend пытаться изменить URL-адрес в браузере?

Любая помощь по этому вопросу будет замечательной.

ответ

7

Проблема заключается в несоответствии вашей версии между угловыми и угловыми Mocks. Эта линия была добавлена ​​недавно в радиально-Mocks:

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

Я мог бы это исправить, нажав обе угловые и радиально-Mocks к 1.2.22, где это изменение еще нет в обоих проектах. Но я думаю, что 1.2.24 для обоих тоже будет работать.

+0

Ты прав, ха-ха. Это была просто версия-матчи между угловыми и угловатыми маками. –

+0

отличный ответ! Благодарю. – Rocco

0

Метод флеша является частью издевательской реализации httpBackend.

См:

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

Чтобы использовать эту реализацию HttpBackend вам нужно вводить 'ngMockE2E' в ваших зависимостях.

+0

Я уже вставляю angular-mocks.js в файл конфигурации кармы. Он работал с предыдущими версиями жасмина и т. Д., Теперь это не работает. –

+0

Недостаточно, API недавно изменился, и теперь для использования passThrough или flush вам нужно ввести ngMockE2E. Это инъекция компонентов, а не зависимость от нового файла. На самом деле, ngMock2E2 является частью файла mock. – benek

Смежные вопросы