5

Мы тестируем угловой webapp с phantomjs.

код контроллера выглядит следующим образом:

angular.module('module' ['dependency']). 
    controller('controller',function ($scope, Model) { 
     // blah-blah-blah 
     Model.list() // calls $http.get 
      .then(); // yadda-yadda-yadda 
    }); 

Backend в Java, поэтому для того, чтобы проверить все приложения, мы используем Selenium WebDriver и PhantomJS. Я использую этот фрагмент, чтобы проверить, завершил ли угловой обработку своих директив (получил его от protractor исходного кода).

var app = angular.element(document.querySelector('#ng-app')); 
var $browser = app.injector().get('$browser'); 
$browser.notifyWhenNoOutstandingRequests(function() { 
    // callback 
}); 

Он отлично работает - в большинстве случаев он действительно может обнаруживать запросы угловой обработки.

Проблема в том, что иногда мой обратный вызов срабатывает даже до того, как контроллер будет выполнен. Во всех случаях, когда я заметил это поведение, это изменение маршрута. Я попытался вставить alert(''); в разные части контроллера, чтобы это выяснить.

Итак, вопрос в том, как я могу выполнить свой ожидающий фрагмент только после того, как была выполнена функция контроллера?

+0

То же самое здесь. Может быть связано с https://github.com/angular/protractor/issues/255 И обратите внимание, что 'notifyWhenNoOutstandingRequests' является частной, недокументированной функцией API. – Offirmo

+0

Не могли бы вы рассказать немного больше об отрывке из источника транспортира? Я получаю ответ, который говорит, что инжектор() не определен при использовании точного кода в исполнителе javascript Selenium. – emery

+1

@emery, вы должны использовать селектор, который соответствует корневому элементу вашего приложения или любому его дочернему элементу. angular.element (null) возвращает пустой массив вместо исключения исключения. массив не имеет поля инжектора, следовательно, ошибка. – ilj

ответ

2

Per the GitHub discussion, вопрос, который вы упомянули, относится к PhantomJS. Другие среды кажутся прекрасными.

Предостережение: я не использую Phantom, и этот разговор 1 год (по состоянию на декабрь 2014 года) - так что возможно, что это уже не проблема.

+0

Да, это очень похоже на нашу проблему. – ilj

+0

рад, что я все еще могу помочь –

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