I solved my own problem. Posting it here for others: I have constraints on my API, and without the proper headers the endpoints aren't found (by design) - I wasn't including the correct headers in the spec. Checking `rails routes` and trying with controller specs didn't surface this because they don't aren't traversing the full routing structure the same as a request spec (I think). This is a good reason to use request specs! In this case the failing test was actually very nicely mirroring reality :D
-- Vinney Cavallo <http://vinneycavallo.com> On Fri, Oct 19, 2018 at 2:10 PM Vinney Cavallo <[email protected]> wrote: > Hi Gabo, > > did you ever arrive at a solution to this? I'm having the same issue using > `type: :request`, `type: :controller` works ok, but when using request > specs (and using a module namespace) rspec can't seem to figure out the > routing/controller. the literally identical uri works just fine in a > browser, curl, etc. > driving me nuts! > > On Monday, January 16, 2017 at 5:49:41 PM UTC-5, gabo zanel wrote: >> >> Hey, thx for your answer, but I'm still getting an error >> Api::V1::UsersController routing routes to #index >> Failure/Error: expect(:get => "/users", :subdomain => 'api').to >> route_to("api/v1/users#index") >> No route matches "/users" >> >> I also tried an other route with /v1/users but thats the same thing: >> Api::V1::UsersController routing routes to #index >> Failure/Error: expect(:get => "/v1/users", :subdomain => 'api').to >> route_to("api/v1/users#index") >> No route matches "/v1/users" >> # ./spec/routing/users_routing_spec.rb:8:in `block (3 levels) in >> <top (required)>' >> >> >> >> Am Montag, 16. Januar 2017 23:36:24 UTC+1 schrieb Jon Rowe: >>> >>> I believe you need to use the full `expect(get(‘/users’, :subdomain => >>> ‘api’)).to route_to("api/v1/users#index”)` to make this work, as RSpec >>> can’t guess the constraint for you. >>> >>> Jon Rowe >>> --------------------------- >>> [email protected] >>> jonrowe.co.uk >>> >>> On Tuesday, 17 January 2017 at 09:24, Gabriel Zangerl wrote: >>> >>> Hi everyone, >>> >>> I'm having an *Rails 5 --api* with Rspec (core) 3.5.4. >>> The API is working under the subdomain *api.mywebsite.com >>> <http://api.mywebsite.com>.* >>> The Controllers are in an *api module* and a* v1 namespace.* >>> >>> Routes look like this: >>> >>> >>> >>> >>> >>> >>> >>> >>> *... constraints subdomain: 'api' do scope module: 'api' do # >>> API v1 namespace :v1 do resources :users, except: :edit >>> end endend* >>> >>> Controllers are lying at *app/controllers/api/v1* like the >>> *UsersController.rb:* >>> module Api::V1 >>> class UsersController < ApplicationController >>> def my_methods >>> ... >>> end >>> end >>> end >>> >>> In the *spec/routing/users_routing.rb* I have got e.g.: >>> require "rails_helper" >>> >>> RSpec.describe Api::V1::UsersController, type: :routing do >>> describe "routing" do >>> it "routes to #index" do >>> expect(:get => "/users").to route_to("api/v1/users#index") >>> end >>> end >>> end >>> >>> But when I call *rails spec* in the console, I get multiple errors like: >>> Api::V1::UsersController routing routes to #index >>> Failure/Error: expect(:get => "/users").to route_to("users#index") >>> No route matches "/users" >>> # ./spec/routing/users_routing_spec.rb:8:in `block (3 levels) in >>> <top (required)>' >>> >>> Can someone help me here? >>> Am I missing something?? >>> >>> Thx. >>> >>> -- >>> 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 post to this group, send email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/rspec/823c800d-15c8-40a1-a143-5e77a8e27d29%40googlegroups.com >>> <https://groups.google.com/d/msgid/rspec/823c800d-15c8-40a1-a143-5e77a8e27d29%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> -- > 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 post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rspec/8958f036-2e9a-4f1a-87dc-14784647d603%40googlegroups.com > <https://groups.google.com/d/msgid/rspec/8958f036-2e9a-4f1a-87dc-14784647d603%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- 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 post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/CAOn1HHHAVvFt%2BQrtLPgGfzYiyspxm2HS5RmTdWo-WR2BOQsWrQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
