3

Можно ли позвонить $httpbackend.flush(); только в том случае, если есть какой-либо ожидающий запроса? Так что я никогда не получит

Error: Unflushed requests: 1,2,3,...,n

Или

Error: No pending request to flush !

ответ

2

Согласно documentation есть более $http.pendingRequests свойство можно использовать. Что-то, как это будет работать:

if($http.pendingRequests.length > 0) { 
    $httpBackend.flush(); 
} 

Я не уверен, что она с ужасно хорошей идеей, но это должно сделать это.

+0

Нет, это не работает – Stevik

1

Я думаю, вам следует организовать ваши тесты, чтобы не использовать какие-либо внутренние тесты «если». Почему? Чтобы это было просто и легко понять, что на самом деле проверено, «если» дает возможность пройти тест, пока он не пройдет.

Напишите отдельную тестовую функцию для проверки, если в API не поступает запрос.

Подробнее о шаблоне AAA (Arrange Act Assert) в тестировании, это поможет вам.

+0

В некоторых случаях решение, если запрос сделан или нет, является детальностью реализации. Тест не должен предполагать, что происходит в реализации – hansmaad

1

Если вы не ожидаете каких-либо запросов, вы можете поместить вызов в http.flush(n) в блок try-catch, игнорируя исключение.

http.whenGet(/* .. */).respond(/*..*/); // maybe implementation needs some data 

service.doSomething(); 

try { http.flush(99); } // resolve all the possible requests my service might have to do 
catch(e) {} 

expect(service.isAwesome).toBe(true);