Comprender la respuesta de Rails 3 con

Utilizando el nuevo ActionControllerrespond_with método ... ¿cómo determina qué representar cuando la acción (guardar) es exitosa y cuándo no?

Pregunto porque estoy tratando de hacer que pase una especificación generada por el andamio (incluida a continuación), aunque solo sea para poder entenderla. La aplicación funciona bien pero, curiosamente, parece estar renderizando/carriers (al menos eso es lo que dice la URL del navegador) cuando falla una validación. Sin embargo, la especificación está esperando"new" (y yo también, para el caso) pero en cambio está recibiendo<"">. Si cambio la especificación para esperar"" Todavía falla.

Cuando rinde/carriers esa página muestra los mensajes de error junto a los campos que fallaron la validación como cabría esperar.

¿Alguien familiarizado conrespond_with ¿Ves lo que está pasando aquí?

#carrier.rb
  validates :name, :presence => true 

#carriers_controller.rb
class CarriersController < ApplicationController
  respond_to :html, :json

...

  def new
    respond_with(@carrier = Carrier.new)
  end

  def create
     @carrier = Carrier.new(params[:carrier])
     flash[:success] = 'Carrier was successfully created.' if @carrier.save
     respond_with(@carrier) 
  end

Especificación que falla:

#carriers_controller_spec.rb
require 'spec_helper'

describe CarriersController do

  def mock_carrier(stubs={})
    (@mock_carrier ||= mock_model(Carrier).as_null_object).tap do |carrier|
      carrier.stub(stubs) unless stubs.empty?
    end
  end


  describe "POST create" do
    describe "with invalid params" do
      it "re-renders the 'new' template" do
        Carrier.stub(:new) { mock_carrier(:save => false) }
        post :create, :carrier => {}
        response.should render_template("new")
      end
    end
  end
end

con este error:

  1) CarriersController POST create with invalid params re-renders the 'new' template
     Failure/Error: response.should render_template("new")
     expecting <"new"> but rendering with <"">.
     Expected block to return true value.
     # (eval):2:in `assert_block'
     # ./spec/controllers/carriers_controller_spec.rb:81:in `block (4 levels) in <top (required)>'

Respuestas a la pregunta(1)

Su respuesta a la pregunta