> In Rails 5, the team changed controller tests to effectively be > integration tests (use URLs instead of actions), don’t test controller > instance variables, don’t test what template is rendered, etc. Instead, you > should test the contents of the page for specifics that indicate the > request completed as expected. > > With RSpec (at least with 3.1), controller tests in Rails 5 are still > based on the old unit test (Test::Case). So I’m wondering where I should go > here? > As far as I remember, they still are even in rspec-rails 4.0.
> It should be noted that I’m just "passing through” Rails 5 on my way to > Rails 6 (or at least 5.2), as that may affect the answer to my question. > > Here are some of the alternatives I can think of: > 1) Stay with current software, use the "rails-controller-testing” to > restore template and assigns testing, and leave it alone for a future > release. > 2) Stay with current software, rewrite all of the controller specs as > request specs (and abandon the controller specs). > 3) Upgrade to a newer version of RSpec that treats controller specs as > request specs (does this even exist?) and rework the controller specs to > follow the rules of request specs. > Depends on how frequently `assigns` and `assert_template`. As you have a different goal, and `rails-controller-testing` is extracted and pretty well maintained, I guess you have better investment for your time than to rewrite specs that work. version of RSpec that treats controller specs as request specs (does this > even exist?) > It doesn't to my best knowledge. There are a couple questions that inform this answer, and perhaps deserve > to be answered in their own right: > > 1) When all is said and done, what is the position of the RSpec team > regarding controller specs vs. request specs? > Controller specs are sometimes used as requests specs, and this lets you easily shot you in your foot. I've just recently seen several `get` calls in a single example, and memoization in the controller that remained between those requests. Rails core team worked hard to make request specs fast. I don't see any reason not to use them. > 2) Since it seems that, for at least awhile, RSpec and Rails were a bit at > odds regarding the nature of these tests, what minor versions of RSpec 3 > align with (are intended to be used with) which versions of Rails 5? > `rspec-rails` 4.x supports Rails 5 (and even 4.2). There was a more reliable table than that in `rspec-rails` source somewhere, but just by checking README.md of different maintenance branches of `rspec-rails` 3.x `rspec-rails` 3.0-3.5 Rails 3&4 `rspec-rails` 3.5-3.9 Rails 3&4&5 It seems to me that these are relatively fundamental questions, and most > probably have been discussed/debated at great length, so if you can point > me to such a discussion that describes the official opinion of the RSpec > team (if there is one), that would be great. (I don’t need someone to write > all that up again if it already exists! I’ve seen a lot of blogs giving > people’s opinoins on controller unit specs vs. request specs vs. feature > specs and I don’t really want to touch the request spec vs. feature spec > argument here.) > For a start, there's an interesting discussion here https://github.com/rspec/rspec-rails/issues/2373 and here https://github.com/rubocop-hq/rspec-style-guide/issues/113 -- You received this message because you are subscribed to the Google Groups "rspec" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/CAAk5Ok-GjtsSQfyFGreEbLnhC_b53iJg15%2B6YKMiw7_Gm9mT0A%40mail.gmail.com.
