Невозможно протестировать Angular UI Typeahead с помощью Poltergeist и PhantomJS

У меня проблема с тестированием моих входных данных. Я использую Rails, RSpec, Capybara, Angular UI 0.10, AngularJS, Poltergeist. Это мой тест:

create(:user, name: "Test User")
fill_in 'User', with: "Test"
find('#delegations').find('li.active').click

Если я запускаю его с помощью драйвера Chrome, он работает успешно. Однако при работе с Полтергейстом окно предложений не отображается, хотя сервер получает запрос и возвращает пользователей соответственно.

Я думаю, что fill_in вызывает blur на поле, заставляя поле исчезнуть. Я использовал Capybara::Screenshot, чтобы увидеть, появилось ли какое-либо предложение, но его не было. Поле ввода даже не получает фокус.




Ответы (1)


Я узнал, что это действительно было из-за того, что Полтергейст вызывает blur в fill_in. Все, что мне нужно было сделать, это перед заполнением поля typeahead выполнить этот скрипт:

page.execute_script "$('input[typeahead]').unbind('blur')"

Таким образом, событие blur UI Typeahead не вызывается, и оно думает, что имеет фокус на поле, соответственно отображая окно предложений.

Если вы не используете JQuery, этот скрипт работает с AngularJS:

elements = document.getElementsByTagName('input');
for (var i = 0; i < elements.length; i++) {
  if (elements[i].hasAttribute('typeahead')) {
    angular.element(elements[i]).unbind('blur');
  }
}
person Diego    schedule 07.02.2014
comment
Ты спасатель. Я боролся с точно такой же проблемой сегодня утром. Если бы мы были вместе в тюрьме, я бы защитил тебя. - person RogerMo; 12.08.2014
comment
Спасибо за вопрос и ответ. Это было у меня в голове. - person Mehdi Khalili; 01.04.2015
comment
Я бы тоже отдал тебе свой кусок мыла, если бы ты уронил свое. - person willz; 09.06.2015
comment
Отличный материал. Чтобы будущим пользователям было понятно, этот метод работает в Twitter Typeahead: twitter.github.io/typeahead. .js/examples, который я считаю тем, что использует Angular Typeahead. - person Chris Beck; 31.08.2015