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