rspec-rails supports integration with Capybara out of the box by adding its Capybara::DSL (visit/page) and Capybara::RSpecMatchers to the examples in the applicable directories, which differ slightly between Capybara 1.x and Capybara >= 2.x.
Capybara::DSL
Adds the visit
and page
methods, which work
together to simulate a GET request and provide access to the result (via
page
).
Capybara::RSpecMatchers
Exposes matchers used to specify expected HTML content (e.g.
should_not have_selector
will work correctly).
Capybara 1.x
Capybara::DSL is added to examples in:
-
spec/requests # included by Capybara
-
spec/controllers
Capybara::RSpecMatchers is added to examples in:
-
spec/requests # included by Capybara
-
spec/controllers
-
spec/views
-
spec/helpers
-
spec/mailers
Capybara 2.0
To use Capybara 2.0, you need rspec-rails-2.11.1 or greater.
Capybara::DSL is added to examples in:
-
spec/features
Capybara::RSpecMatchers is added to examples in:
-
spec/features
-
spec/controllers
-
spec/views
-
spec/helpers
-
spec/mailers
Upgrading to Capybara-2.0
Many users have been confused by the co-existence of the the Capybara::DSL (visit/page) alongside the rack-test DSL (get|post|put|delete|head/response.body) in examples in spec/requests and spec/controllers. As of rspec-rails-2.11.1 and capybara-2.0.0.beta2, these are separated as follows:
-
Capybara::DSL is included
spec/features
-
rack-test DSL is included in
spec/requests
andspec/controllers
Capybara::RSpecMatchers is added to examples in:
-
spec/features
-
spec/controllers
-
spec/views
-
spec/helpers
-
spec/mailers
If you're upgrading to Capybara-2.0 and you used visit/page in spec/requests you'll want to move those examples to spec/features and they should just work.
If you want to leave those examples in spec/requests, you can include Capybara::DSL in those examples yourself as follows, but this is absolutely not recommended as you will be overriding the intended behavior and accepting the risks associated with doing so:
# not recommended!
RSpec.configure do |c|
c.include Capybara::DSL, :file_path => "spec/requests"
end