Я написал фабрику с AngularJs, у которой есть метод, который возвращает обещание http.Испытание фабрики угловатых с кармой
'use strict'
angular.module('projDefinitApp')
.factory 'testService', ($http) ->
{ getTest: (testID) ->
$http.get "temp/test.json"
}
У меня возникают некоторые проблемы при проведении теста, используя карму и жасмин. Обещание не принесло результата. Я попытался создать var, а затем вызвать функцию и изменить значение var. Но это не обновляет значение:
'use strict'
describe 'Service: testService', ->
# load the service's module
beforeEach module 'projDefinitApp'
# instantiate service
testService = {}
beforeEach inject (_testService_) ->
testService = _testService_
it 'should do something', ->
retrieved = undefined
testService.getTest().success ($data,retrieved) ->
retrieved = $data
return
expect(retrieved).toBe(null)
return
return
Консоль выхода выглядит следующим образом
PhantomJS 1.9.8 (Linux) Service: testService should do something FAILED
Expected undefined to be null.
Это, кажется, работает лучше, но держится не работает ... Если я не делаю макет (с использованием httpbackend) обратного вызова не вызывается. Эта ошибка показана «Ошибка: Тайм-аут - Асинхронный обратный вызов не был вызван в течение времени, указанного jasmine.DEFAULT_TIMEOUT_INTERVAL» Введенный вами код указан в вашем примере – fernandezr
@fernandezr Извините, я пропустил '$ rootScope. $ Apply()' part кода, посмотрите на пример снова. Как я уже упоминал ранее, вы также можете использовать '$ httpBackend.flush()', если '$ httpBackend' уже доступен в тесте. – yggie
Код avobe работает, но он начинает делать GET петиции в других местах не только «temp/test.json». Я также вижу, что с использованием $ httpbackend это издевается над петицией GET, но я бы хотел, чтобы, если я позвоню в getTest, этот метод сделает сам запрос на получение, без необходимости насмехаться. Это возможно? – fernandezr