2016-08-30 2 views
0

Добрый день!

Я хочу проверить, вызван ли метод parseUrl, но в результате: тест был неудачным - parseUrl никогда не вызывался, хотя, если я поместил parseUrl() за пределы функции $ interval service, тогда тест пройдет успешно.

Вот место, где называется parseUrl:

testMethod() { 
     let intervalPromise = this._$interval(() => { 
     this.parseUrl('test', 'test_code_name'); 
     }, 500); 
    } 
    parseUrl(url, name) {} 

Вот тестовый пример:

it('Expect testMethod to be called', function() { 
    TestService.testMethod() 
    spyOn(TestService, 'parseUrl').and.callThrough(); 
    expect(TestService.parseUrl).toHaveBeenCalled(); 
}); 

Также тот факт, если я поставил TestMethod() за пределами $ а затем успешно пройти тест.

ответ

1

В тесте вам нужно впрыскивать $interval службу (можно использовать ngMock) и вызвать $interval.flush(500);

var $interval; 

angular.mock.inject(function (myModuleService, _$interval_) { 
    // Initialize the service under test instance 
    $interval = _$interval_; 
}); 

it('Expect testMethod to be called', function() { 
    TestService.testMethod() 
    spyOn(TestService, 'parseUrl').and.callThrough(); 
    $interval.flush(500); 
    expect(TestService.parseUrl).toHaveBeenCalled(); 
}); 

Вот ссылка на документы: https://docs.angularjs.org/api/ngMock/service/$interval

Использование $ interval.flush (миллисекунд), чтобы двигаться вперед на миллисекунды и запускать любые функции, запланированные для выполнения в это время.

+0

Thanks! Теперь он работает хорошо! – Elias