Как вызвать автоматическое ожидание AJAX на Капибаре без использования rspec? - PullRequest
1 голос
/ 24 ноября 2011

Под Асинхронный Javascript , README-капибара приводит следующий пример чего-то, что будет ждать Ajax:

page.should have_text('baz')

Это конструкция RSpec, но я использую Test ::Блок + следует.Что эквивалентно в Test :: Unit / musta?Это мой код:

assert_equal 'foo', find('.bar').text

Строка, предшествующая этому, запускает событие Ajax.Мое утверждение будет успешным, если выполнится после завершения ajax, но не выполнится, если раньше.Как мне сказать, чтобы он продолжал повторять попытки, пока он не завершится успешно или не превысит Capybara.default_wait_time?

Ответы [ 3 ]

3 голосов
/ 06 апреля 2012

Я использую капибару и селен и wait_until после нажатия где-либо или посещения нового пути :

somebutton.click
wait_until { something to be true }

или

somebutton.click
wait_until(n) { something to be true }

где "n" - количество секунд ожидания

3 голосов
/ 25 ноября 2011

Список рассылки капибары работал лучше, чем Stack Overflow, хотя модераторам потребовалось более 24 часов, чтобы утвердить мой пост из-за Дня Турции. Вот ответ Джонаса Никласа :

assert page.has_text?('test')

обратите внимание, что отрицательная форма:

assert page.has_no_text?('test')

и НЕ:

assert !page.has_text?('test')

это НЕПРАВИЛЬНО, не делай этого. В настоящее время у RSpec такой проблемы нет больше, так что это безопасно сделать:

page.should_not have_text('test')

/ Джонас

0 голосов
/ 25 ноября 2011

Я тоже понял что-то еще, что сработало. Я предпочитаю ответ Джонаса, но это также работает:

 assert find('.bar:contains("foo")')

Утверждение не является обязательным, поскольку функция find вызывает исключение для ошибка, это просто документ, подтверждающий, что это тест.

...