Я пытался и пытался заставить это работать. документация в лучшем случае кратка:
resetExpectations(); — сбрасывает ожидания всех запросов, но сохраняет все внутренние определения. Обычно вы вызываете resetExpectations во время многоэтапного теста, когда хотите повторно использовать один и тот же экземпляр макета $httpBackend.
Каждый раз, когда вызывается мой второй запрос, мой результат всегда имеет данные первого результата. Посмотрите на эту скрипту http://jsfiddle.net/tbwn1gt0/2/, где я сбрасываю ожидания после первого сброса, затем установите новые ожидания/результат, затем снова выполните сброс, чтобы получить неверные данные.
// --- SPECS -------------------------
var url = '/path/to/resource';
var result = '';
describe('$httpBackend', function () {
it("expects GET different results in subsequent requests", inject(function ($http, $httpBackend) {
successCallback = function(data){
result = data;
}
// Create expectation
$httpBackend.expectGET(url).respond(200, 'mock data');
// Call http service
$http.get(url).success(successCallback);
// flush response
$httpBackend.flush();
console.log( result ); // logs 'mock data'
// Verify expectations
expect( result ).toContain('mock data'); // works as it should
// reset the expectations
$httpBackend.resetExpectations();
// set the fake data AGAIN
$httpBackend.expectGET(url).respond(200, 'doof the magic cragwagon');
// get the service AGAIN
$http.get(url).success(successCallback);
expect( result ).toContain('doof'); // does not work, result is original result
console.log( result ); // logs 'mock data'
}));
});
// --- Runner -------------------------
(function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function (spec) {
return htmlReporter.specFilter(spec);
};
var currentWindowOnload = window.onload;
window.onload = function () {
if (currentWindowOnload) {
currentWindowOnload();
}
execJasmine();
};
function execJasmine() {
jasmineEnv.execute();
}
})();
Другие вещи, которые я пробовал, включают добавление afterEach с помощью resetExpectations (помещение каждого запроса в новый оператор it). и множество других случайных попыток. Если он попытается изменить ожидаемый URL-адрес на что-то неожиданное, произойдет ошибка, как и должно быть, поэтому я знаю, что запросы обрабатываются по крайней мере через httpBackend.
Это дефект или я неправильно его реализую?