RSpec2 и капибара - PullRequest
       53

RSpec2 и капибара

11 голосов
/ 31 августа 2011

Капибара сбивает меня с толку. Если я использую Capybara в сочетании с Ruby on Rails 3 и RSpec 2, то в тестах запросов RSpec работает следующее средство сопоставления:

response.body.should have_selector "div.some_class"

Объект ответа имеет класс ActionDispatch::TestResponse. Но следующая строка, которая должна официально работать , не работает:

page.should have_selector "div.some_class"

Объект страницы имеет класс Capybara::Session. В каких случаях вам нужно использовать объект response.body, а когда нужно использовать объект page?

Ответы [ 2 ]

18 голосов
/ 15 сентября 2011

Так что я просто столкнулся с подобным, и вот что я думаю:

Это зависит от того, какой код вы здесь не указали, от того, как вы посещаете страницу. Я пишу спецификации запроса rspec.

Если я получу страницу с собственным rspec:

get '/some/path'

тогда response.body.should have_selector работает, как вы говорите, но page.should не работает.

Чтобы заставить 'страницу' Capybara работать (и чтобы взаимодействия Capybara, такие как click_button или fill_in работали), вместо извлечения с помощью rspec 'get', вам нужно получить с помощью Capybara 'visit':

visit '/some/path'
page.should have_selector("works")

'page', метод капибары, устанавливается только при использовании метода 'посещения', метода капибары.

Это сбивает с толку все смешивание и сопоставление различных библиотек, участвующих в тестировании рельсов.

3 голосов
/ 31 августа 2011

Вы бы использовали response, если хотите использовать стандартные методы rails. И, альтернативно, вы будете использовать page, когда хотите использовать методы капибары. В капибаре вы, скорее всего, будете использовать have_css в приведенном примере.

...