RSpec2和Capybara

0x4*_*672 11 capybara rspec2 ruby-on-rails-3

水豚让我很困惑.如果我将Capybara与Ruby on Rails 3和RSpec 2结合使用,那么在RSpec请求测试中,以下匹配器可以工作:

response.body.should have_selector "div.some_class"
Run Code Online (Sandbox Code Playgroud)

响应对象具有类ActionDispatch::TestResponse.但是以下应该正式运行的行不起作用:

page.should have_selector "div.some_class"
Run Code Online (Sandbox Code Playgroud)

页面对象具有类Capybara::Session.在哪些情况下,您必须使用该response.body对象,何时必须使用page对象?

jro*_*ind 18

所以我遇到了类似的问题,这就是我认为发生了什么:

这取决于您未在此处访问该页面的代码.我正在写一个rspec请求规范.

如果我使用rspec自己检索页面:

get '/some/path'
Run Code Online (Sandbox Code Playgroud)

然后response.body.should have_selector就像你说的那样工作,但是page.should却没有.

要使Capybara'page'工作(并使capybara交互如click_button或fill_in工作),而不是使用rspec的'get'进行检索,您需要使用Capybara的'visit'进行检索:

visit '/some/path'
page.should have_selector("works")
Run Code Online (Sandbox Code Playgroud)

'page',一种水豚方法,只有在使用'visit',一种水豚方法时才会被设置.

这确实令人困惑,轨道测试中涉及的不同库的所有混合和匹配.