2015-06-30 3 views
1

Я работаю над тестами для моего приложения angularjs, и когда страница загружена, некоторые http-вызовы сделаны. При вызове любого вызова появляется кружок загрузки, и при получении ответа кружок загрузки скрыт.AngularJS & Protractor - Сделайте запрос http последним дольше

Как я могу сделать видимый круг, скажем, 10 секунд?

+1

используйте службу '$ timeout' или' $ interval' – Vineet

ответ

0

Вы можете использовать метод setTimeout в javascript или, альтернативно, функцию $ timeout в угловых js.

+0

Не используйте 'setTimeout()' непосредственно в вашем контроллере. Если вы его используете, вам нужно вручную запустить «$ apply» вручную, что не очень хорошо. – Vineet

+0

Но я не хочу редактировать какие-либо файлы приложений, только тестовые файлы. Итак, как я могу установить таймер, чтобы сделать звонок дольше, когда он запускается при загрузке страницы? – Stevik

+0

Я не говорю, что вам нужно подождать не менее 10 секунд, чтобы запустить ваш вызов ajax. Вы должны запустить ajax-вызов при загрузке страницы и привязать HTML через 10 секунд. Он будет работать по вашему желанию. – Vineet

2

Вы можете перехватывать запросы HTTP и задержать их:

сети delay.js

exports.module = function() { 
    angular.module('networkDelayInterceptor', []) 
    .config(function simulateNetworkLatency($httpProvider) { 
     function httpDelay($timeout, $q) { 
      var delayInMilliseconds = 1000; 

      var responseOverride = function (reject) { 
       return function (response) { 
        //Uncomment the lines below to filter out all the requests not needing delay 
        //if (response.config.url.indexOf('some-url-to-delay') === -1) { 
        // return response; 
        //} 

        var deferred = $q.defer(); 
        $timeout(
         function() { 
          if (reject) { 
           deferred.reject(response); 
          } else { 
           deferred.resolve(response); 
          } 
         }, 
         delayInMilliseconds, 
         false 
        ); 

        return deferred.promise; 
       }; 
      }; 

      return { 
       response: responseOverride(false), 
       responseError: responseOverride(true) 
      }; 
     } 

     $httpProvider.interceptors.push(httpDelay); 
    }) 
}; 

Использование

beforeAll(function() { 
    var networkDelay = require('network-delay'); 

    // You can customize the module with a parameter for the url and the delay by adding them as a 3rd and 4th param, and modifying the module to use them 
    browser.addMockModule('networkDelayInterceptor', networkDelay.module); 
}); 

afterAll(function() { 
    browser.removeMockModule('networkDelayInterceptor'); 
}); 

it('My-slowed-down-test', function() { 

}); 

Источник: http://www.bennadel.com/blog/2802-simulating-network-latency-in-angularjs-with-http-interceptors-and-timeout.htm

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