Some clarifications that might help your deliberations: `rspec-rails` maintains controller specs as a parallel to controller tests, with the intention that if you wish to continue to use them you bring in the `rails-controller-test` gem.
We recommend request specs rather than controller specs for the same reasons the Rails team does, thus it is likely rspec-rails will remove support for controller specs at the same time Rails does. Controller specs were always a bit weird, pretending to be unit tests when in fact they were a set of limited integration tests with introspection into the internals of a controller, I would never recommend asserting on assigns in a controller. Cheers Jon ---------------- m...@jonrowe.co.uk https://jonrowe.co.uk On 30 November 2020 at 17:05, Phil Pirozhkov wrote: > > 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 (http://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 > > > > 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 rspec+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/dejalu-217-3700ca81-2903-4a43-aa70-87b831d42325%40jonrowe.co.uk.