Ruby on rails 3 RSpec2和水豚

Ruby on rails 3 RSpec2和水豚,ruby-on-rails-3,rspec2,capybara,Ruby On Rails 3,Rspec2,Capybara,水豚把我弄糊涂了。如果我将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。在哪些情况下您

水豚把我弄糊涂了。如果我将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
对象?

当您想要使用标准rails方法时,您将使用
response
。另外,当您想要使用水豚方法时,您也可以使用
page
。在水豚中,您最有可能在给出的示例中使用
have_css

所以我遇到了类似的情况,我想这就是发生的情况:

这取决于您如何访问页面的代码,这里没有包括这些代码。我正在写rspec请求规范

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

get '/some/path'
然后response.body.应该让_选择器按照您所说的那样工作,但page.should不应该

要使水豚的“页面”工作(并使水豚的交互,如单击按钮或填写工作),您需要使用水豚的“访问”进行检索,而不是使用rspec的“获取”:

visit '/some/path'
page.should have_selector("works")
“page”是一种水豚方法,仅在使用“visit”时设置,这是一种水豚方法


rails测试中涉及的不同库的混合和匹配确实会让人困惑

没关系,我没意识到水豚有一个have_选择器方法。但是答案仍然是,
page
对于水豚,
response
对于rails。但是为什么“page.should have something”不起作用呢?我们在rails 3应用程序中使用require“capybara/rspec”和require“capybara/rails”,但是“page.should..”在rspec请求测试中不起作用。我希望我知道。似乎混合RSpec和水豚酸会引起一些问题。我知道
page.body有内容?
适用于我
page.should有内容的地方。我已经开始使用
page.should有xpath
无处不在。非常好的答案。这就是区别。如果使用rspec的get“/some/path”,则response.body包含结果页面,您可以使用response.body.should\u选择器。如果您是水豚的访问“/some/path”,则page.body包含生成的页面,您可以使用page.should\u选择器。上述修复对我不起作用-我仍然会在访问中遇到相同的错误。。。你是对的,这真是太让人困惑了:-)