Search code examples
ruby-on-railsjsonrspecactive-model-serializers

Active Model Serializer, testing which serializer is used to render response


I'm using active model serializers to render JSON responses from a rails controller.

I have a controller action like this:

def show
  @foo = Foo.find(params[:id])
  if @foo.user == current_user
    render json: @foo, serializer: FooSerializer
  else
    render json: @foo, serializer: TrimmedFooSerializer
  end
end

I want to be able to test which serializer has been used in my Rspec controller tests. Is it possible to get a reference to the serializer from the tests?

UPDATE:

I don't think this a correct use of the serializer. I now have logic in the serializer itself to conditionally include attributes. The controller shouldn't really care about which serializer to use.


Solution

  • You can try this. I am assuming that you are using factory_girl. You can write the other test by returning a different user for current_user

    describe "show" do
      it "should use FooSerializer to serialize if the logged in user is the same as params user" do
        user = FactoryGirl.create(:user)
        controller.stub(:current_user).and_return(user)
        FooSerializer.any_instance.should_receive(:to_json).and_return("{\"key\": \"value\"")
        get :show, :id => user.id
        response.should be_success
      end
    end