2014-02-13 2 views
0
visit "/whatever" 
expect(page).to have_no_content "This is loaded in asynchronously" 

Это должно потерпеть неудачу, но пройдет. Зачем? Когда первая страница загружается, содержимого там нет, и Capybara разумно этого не ждет.Capybara: проверьте, что содержимое, загруженное ajax, отсутствует

Что такое благословенный способ дождаться этого контента, теперь, когда Capybara 2.0 объявила wait_until плохие новости?

ответ

1
visit "/whatever" 
wait_for_ajax do 
    expect(page).to have_no_content "This is loaded in asynchronously" 
end 

Тогда в spec_helper:

def wait_for_ajax 
    page.evaluate_script("jQuery.active") == 0 
    yield 
end 

Это будет оценивать сценарий, пока это не так, то запустите утверждение.

1
visit "/whatever" 
wait_for_ajax do 
    expect(page).to have_no_content "This is loaded in asynchronously" 
end 

Тогда в spec_helper:

def wait_for_ajax 
    sleep(Capybara.default_wait_time) 
    yield 
end 

Обратите внимание, что это ждет до конца Капибара-х default_wait_time каждый раз, когда он запускает эту спецификацию. Но я не уверен, как еще вы проверите что-нибудь подобное. Если ваш ajax выполняется быстро, вы можете это компенсировать, установив default_wait_time примерно на 1 секунду.

+0

На этой странице объясняется, почему wait_until был обесценен: http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara, так что с учетом того, что методы page.should not_have теперь будут использовать capybara время ожидания эффективно. Первый пример chadoh - это мой голос по поводу того, что я должен работать с ajax, а второй - хорошо, мое правило - никогда не использовать метод сна. Это надежный способ сделать ваши тесты медленными. – Dono

+0

Страницы ждут, если в настоящее время присутствует контент, который вы утверждаете не должен, или если есть контент, который отсутствует, который вы утверждаете, должен быть. Но если вы утверждаете, что контента нет, и это не так, он перестает ждать. Он не ждет, чтобы проверить, что содержимое не загружается через ajax. Но в этом случае мне это нужно. – chadoh

+1

А теперь я получаю то, чего вы пытаетесь достичь. Попробуйте эту ссылку http://www.natontesting.com/2012/02/27/a-solution-to-ajax-errors-with-capybara-against-a-jquery-site/. В зависимости от вашей версии capybara вам может потребоваться отменить wait_until. Таким образом, ваш шаг может дождаться завершения ajax, а затем утвердить. – Dono

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