同时使用webrat和capybara

时间:2011-05-17 04:13:25

标签: ruby-on-rails unit-testing rspec capybara webrat

我一直在使用Capybara进行集成/请求测试,但刚刚意识到我无法使用它进行视图测试。

This SO answer表示Webrat和Capybara可以串联使用;但RSpec docs建议必须在两者之间做出选择。 Here's another github thread表明webrat可以用于视图和水豚的整合。

我发现如果我在我的gemfile中包含Webrat,我可以使用webrat查看没有问题的视图,但我的水豚风格的集成测试不再有效。具体来说,我通过以下简单示例得到错误:

it "should have a Home page at '/'" do
  visit '/'
  page.should have_selector('title', :content => "Home page")
end

我收到错误:

No response yet. Request a page first.

让webrat和capybara相互喜欢的最佳方式(如果有的话)是什么?

2 个答案:

答案 0 :(得分:11)

通常没有理由同时使用Webrat和Capybara。选一个(可能是水豚)。查看测试是一个坏主意,一般不应该是必要的;通常,您的集成测试应涵盖这一点。

换句话说,修复您的测试策略,问题就会消失。

答案 1 :(得分:6)

总的来说,我同意Marnen关于“只选择其中一个,可能是Capybara”,但是使用它们的一个可能原因是逐渐迁移。

说,你有一个大型的测试套件,你正在将它迁移到Capybara,但是你想让你的一些旧测试保持“Webrat驱动”一段时间。

虽然,我没有为这种情况找到理想的解决方案,但这就是我所做的:

# features/support/env.rb
...
if ENV['WITH_WEBRAT'].nil?
    require 'capybara/rails'
    require 'capybara/cucumber'
    ...
else
    require 'webrat'
    ...
end
...

# config/cucumber.yml
...
default: --profile capybara
capybara: <% std_opts %> --tags ~@webrat features
webrat:   <% std_opts %> --tags @webrat features WITH_WEBRAT=1
...

# features/webrat.feature
@webrat
...

# features/capybara.feature
...

现在,您可以cucumber运行仅限capybara的测试套件,或cucumber -p webrat执行旧版Webrat功能。

不理想,但它对我有用。