RSpec2 and Capybara

独自空忆成欢 提交于 2019-12-28 13:29:12

问题


Capybara is confusing me. If I use Capybara in combination with Ruby on Rails 3 and RSpec 2, then in RSpec request tests, the following matcher works:

response.body.should have_selector "div.some_class"

The response object has the class ActionDispatch::TestResponse. But the following line, which should work officially, does not work:

page.should have_selector "div.some_class"

The page object has the class Capybara::Session. In which cases do you have to use the response.body object and when do you have to use a page object ?


回答1:


So I just ran into similar, and this is I think what's going on:

It depends on code you didn't include here of how you visit the page. I'm writing an rspec request spec.

If I retrieve the page with rspec's own:

get '/some/path'

then response.body.should have_selector works as you say, but page.should does not.

To make Capybara 'page' work (and to make Capybara interactions like click_button or fill_in work), instead of retrieving with rspec's 'get', you need to retrieve with Capybara's 'visit':

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

'page', a capybara method, only gets set when using 'visit', a capybara method.

This does get confusing, all the mixing and matching of different libraries involved in rails testing.




回答2:


You would use response when you want to use the standard rails methods. And, alternately, you'd use page when you want to use the capybara methods. In capybara you'd most likely use have_css in the example given.



来源:https://stackoverflow.com/questions/7260720/rspec2-and-capybara

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!