0

just a simple question for a render json call I'm trying to test. I'm still learning rspec, and have tried everything and can't seem to get this to work. I keep getting an ActionController::RoutingError, even though I defined the route and the call to the api itself works.

In my controller I have the method:

class PlacesController < ApplicationController
  def objects
    @objects = Place.find(params[:id]).objects.active
    render json: @objects.map(&:api)
  end
end

with the render json: @objects.map(&:api), I'm calling the api method in the Object model

class Object
  def api
    { id: id,
      something: something,
      something_else: something_else,
      etc: etc,
      ...
    }
  end
end

My routes file:

get     "places/:id/objects"              => "places#objects"

my rspec: spec/controllers/places_controller_spec.rb

describe "objects" do 
  it "GET properties" do
    m = FactoryGirl.create :object_name, _id: "1", shape: "square"
    get "/places/#{m._id}/objects", {}, { "Accept" => "application/json" }

    expect(response.status).to eq 200
    body = JSON.parse(response.body)
    expect(body["shape"]).to eq "square"
  end
end

I keep getting the error

Failure/Error: get "/places/1/objects", {}, { "Accept" => "application/json" }
 ActionController::RoutingError:
   No route matches {:controller=>"places", :action=>"/places/1/objects"}

Any help would be much appreciated, thanks.

1 Answer 1

1

Because you have the spec in the controllers folder RSpec is assuming it is a controller spec.

With controller specs you don't specify the whole path to the route but the actual controller method.

get "/places/#{m._id}/objects", {}

Should be

get :objects, id: m._id

If you don't want this behaviour you can disable it by setting the config infer_spec_type_from_file_location to false. Or you could override the spec type for this file by declaring the type on the describe

describe "objects", type: :request do - change :request to what you want this spec to be.

Although I recommend using the directory structure to dictate what types of specs you are running.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for the response Carl, but when I use get :objects, id: m._id, I get the error Failure/Error: get :objects, id: "1". NoMethodError: undefined method 'properties' for nil:NilClass

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.