如何使用Capybara获取,显示,发布,输入控制器测试?

时间:2011-05-06 07:36:02

标签: ruby-on-rails-3 testing rspec2 capybara

我只是不确定说出来的确切方法是什么......

这告诉我'还没有回应。首先请求页面。'

it "should list searches" do
  get 'index'
  page.should have_selector('tr#search-1')
end

这意味着是这样吗?

it "should list searches" do
  get 'index' do
    page.should have_selector('tr#search-1')
  end
end

这种方式似乎并没有真正测试任何东西。

正确的方法是什么?

3 个答案:

答案 0 :(得分:6)

根据to this,Capybara不支持使用默认驱动程序的PUT和DELETE请求。 PUT和DELETE通常都是用javascript伪装来容纳基于REST的架构。

我没有检查过,但我相信你可以使用PUT和DELETE与Capybara,如果你使用其中一个与JS兼容的驱动程序,如Selenium。

答案 1 :(得分:5)

getpost等方法是Rails控制器测试的functional test interface的一部分,这是一个完全独立的测试系统。你不能在Capybara中使用它们。

对于GET请求,请改用Capybara的visit方法。

对于其他请求类型(POST,PUT,...),要么执行用户所做的操作,要访问带有表单的页面以填写并提交。或者,如果您正在测试API,请在不使用Capybara的情况下为您的控制器编写功能测试,如下所示:

post :index
response.status.should == 200
response.body.should contain('Hello World')

另见Jonas在why you shouldn't test APIs with Capybara上的帖子。

答案 2 :(得分:0)

我认为您通常会使用visit与Capybara一起访问网页。

it 'should list searches' do
  visit '/'
  page.should have_selector('tr#search-1')
end