-
-
Couldn't load subscription status.
- Fork 1k
Description
What Ruby, Rails and RSpec versions are you using?
Ruby version: ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-darwin21]
Rails version: Rails 7.0.4.3
RSpec version: RSpec 3.12
- rspec-core 3.12.2
- rspec-expectations 3.12.3
- rspec-mocks 3.12.5
- rspec-rails 6.0.2
- rspec-support 3.12.0
Observed behaviour
This is about a view spec. According to https://github.com/rspec/rspec-rails/blob/main/lib/rspec/rails/view_spec_methods.rb it should be possible to set extra params required for URL generation, but that isn't working (anymore?).
I'm doing something like:
before do
controller.extra_params = { :seller_id => seller.id }
endAnd in the template I'm using a URL method which requires a :seller_id in the path. This works fine serving the page, but in the view spec this causes a No route matches error with missing required keys: [:seller_id].
Expected behaviour
The extra_params should be used when URLs are generated.
Investigation / Suggested Fix
Rails is using a _recall hash in the options hash passed around for url generation to lookup previous path parameters. This is initialized in https://github.com/rails/rails/blob/58528bf270325789562413eec20b3cbf1a866e7f/actionpack/lib/action_controller/metal/url_for.rb#L33, using the request.path_parameters.
When I used the following code, the URL generation works fine:
before do
request.path_parameters.merge!(seller_id: seller.id)
endThe extra_params on the other hand only seem to affect the request.path (maybe used in older Rails versions?). It should also adjust the request.path_parameters which should resolve the issue.