Cucumber vs Capybara
Capybara is a tool that interacts with a website the way a human would (like visiting a url, clicking a link, typing text into a form and submitting it). It is used to emulate a user's flow through a website. With Capybara you can write something like this:
describe "the signup process", :type => :feature do
before :each do
User.make(:email => '[email protected]', :password => 'caplin')
end
it "signs me in" do
visit '/sessions/new'
within("#session") do
fill_in 'Login', :with => '[email protected]'
fill_in 'Password', :with => 'password'
end
click_link 'Sign in'
page.should have_content 'Success'
end
end
Cucumber is a tool to write human-readable tests that are mapped into code. With it, you can rewrite the above example like this:
Scenario: Signup process
Given a user exists with email "[email protected]" and password "caplin"
When I try to login with "[email protected]" and "caplin"
Then I should be logged in successfully
The almost plain-text interpretation is useful to pass around non-developers but also need some code mapped into it to actually work (the step definitions).
Usually you will use Capybara if you're testing a website and use Cucumber if you need to share those tests with non-developers. These two conditions are independent so you can use one without the other or both or none.
PS: in the code snippet there is some RSpec as well. This is needed because Cucumber or Capybara by themselves cannot test something. They rely on RSpec, Test::Unit or minitest to do the actual "Pass or Fail" work.
cucumber is a BDD tool that expresses testing scenarios in a business-readable, domain-specific language.
capybara is an automated testing tool (often used) for ROR applications.
On the capybara github page, there's an example on using capybara with cucumber.
Cucumber is a general-purpose BDD tool. It knows nothing about web apps. So Cucumber step definitions call Capybara in order to test web apps.