Что означает страница и page.body в Капибаре

Я новичок, пытающийся протестировать мой Rails-проект с использованием Capybara, но меня смущает значение page и page.body, когда я пытаюсь обнаружить некоторую строку из моего div: (in:js=>true mode)

<div>"some content"</div>

Некоторые из моих испытаний пройдут с

page.should have_content "some content"

Некоторые пройдут с

page.body.should have_content "some content"

Я пытаюсь поместить контент, но только "page.body" даст мне некоторую ценную информацию, сама "страница" ничего не покажет мне, и я не могу найти какого-либо убедительного объяснения того, что сделали page и page.body. Может кто-нибудь мне помочь?

2 ответа

Решение

page - это текущий сеанс Capybara - вызов #find/#first/#visit/etc аналогичен вызову page.find(...), page.first(...) и т. д.

page.body возвращает HTML-источник страницы.

Большую часть времени вы не хотели бы вызывать совпадений на page.body, поэтому 99,9% времени вы должны использовать

page.should have_content(...) 

или эквивалентный ожидаемый синтаксис. Это связано с тем, что вызов matchers на page.body на самом деле пропускает возвращаемую строку через анализатор и запрашивает ее, а не запрашивает браузер, в котором вы тестируете.

Я считаю, что этот синтаксис устарел, и вы должны изменить на:

expect(page).to have_content "some content"

Это проверит отображаемую страницу на предмет содержания, которое вы укажете. Если вы не уверены, воспроизводите ли вы ожидаемую страницу и хотите ли вы отладить свой тест, вы можете использовать puts page.body сделать это.

Вы можете узнать больше о следует и ожидать здесь.

Другие вопросы по тегам