ActionControllerの新しいrespond_with
メソッドを利用しています...アクション(保存)が成功した場合と失敗した場合に何をレンダリングするかをどのように決定しますか?
足場で生成された仕様(以下に含まれています)を通過させようとしているので、それを理解できるようにするためだけにお願いします。アプリは正常に動作していますが、奇妙なこと/carriers
に、検証が失敗するとレンダリングされているように見えます(少なくともブラウザーのURLはそれを示しています)。それでも、仕様は期待してい"new"
ます(そして、私もそうです)が、代わりにを受け取ってい<"">
ます。スペックを変更し""
ても失敗することが予想されます。
そのページをレンダリングする/carriers
と、予想どおりに検証に失敗したフィールドの横にerror_messagesが表示されます。
respond_with
ここで何が起こっているのかを知っている人はいますか?
#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
失敗している仕様:
#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
このエラーで:
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)>'