Why Did Capybara Move Specs into spec/features?

Hello Everyone,

I am new to Ruby on Rails. I just finished Michael H.'s Ruby on
Rails
Tutorial
http://ruby.railstutorial.org/ruby-on-rails-tutorial-book
and I
just started on Agile Web D. with Rails, Fourth Edition by
Sam
Ruby http://pragprog.com/book/rails4/agile-web-development-with-rails.
In
trying to build confidence and proficiency, I started building small
apps
and decided, as I had learned from Michael H., to use
capybarahttps://github.com/jnicklas/capybaraand
rspec https://github.com/rspec/rspec. But when I tried it nothing was
working. It turns out, this was the reason:

If you are using Rails, put your Capybara specs in spec/features.

And in order to use the tests I had created in spec/requests, I have to do
this:

If you are not using Rails, tag all the example groups in which you want
to

use Capybara with :type => :feature.

Can anyone explain the reasoning behind this? I’m sure there is a good
reason for this that my newbie self does not comprehend yet. Thank you
in
advance.

p

Here’s a post by Jose Valim on the reasoning behind the change:

As a quick summary, Capybara is an acceptance test framework and as
such,
tests should be written from a browser or user’s perspective. With the
rspec-rails gem, tests found in spec/requests directory have access to
methods that expose lower-level details like requests and
responses(methods
like get, put, post.) So if Capybara tests are also found in that same
spec/requests directory, you are able to use both the Capybara DSL and
the
free methods that are meant for integration tests which causes a
conflict
and leads to some developers using a mix of both. This leads to ugly
test
suites.

The solution they came up with is to create a separate directory meant
for
use with Capybara DSL, which is spec/features and another directory
(spec/api) meant for use with the Rails provided integration test tools.

Michael H. will be releasing a newer version of his tutorial sometime
in
the future which will provide more up-to-date material. You might also
want
to look at RSpec’s ‘expect’ syntax for its assertions. They plan on
deprecating the ‘should’ syntax possibly as early as RSpec 3.0.

From my point of view (as a professional Rails dev), this makes much
better and more complete sense. Devs are always confused about this,
and have lots of trouble around it.

One often ends up wondering “Do I use visit/page or do I use
request(get/post)/response?”

Julian

Thanks for the advice on the upcoming RSpec expect syntax.