RSpec2のコントローラをテストしています。作成したアクションと更新アクションの両方に対して、無効なパラメータを渡したとき、それぞれ "編集"テンプレート。それはやっているが、私のテストは決して合格しない。この中Rspec2:無効なparamsが失敗した後にresponse.should render_template( "new")
describe "with invalid params" do
before(:each) do
User.stub(:new) { mock_user(:valid? => false, :save => false) }
end
it "re-renders the 'new' template" do
post :create, :company_id => mock_company.id
response.should render_template("new")
end
end
結果:
re-renders the 'new' template
expecting <"new"> but rendering with <"">
ここでは、コントローラのアクションです:
respond_to do |format|
if @user.save
format.html {
flash[:notice] = "#{@user.full_name} was added to #{@company.name}."
redirect_to company_users_url(@company)
}
else
logger.debug @user.errors
format.html{
render :new
}
end
end
また、この問題は、このコントローラに孤立しているようです。私は別のコントローラを実行しているほぼ同じコードを持っており、それは問題ありません。私は問題がどこにあるかわからない。
アップデート:ここで 2つのモックメソッド
def mock_user(stubs={})
@mock_user ||= mock_model(User, stubs).as_null_object
end
def mock_company(stubs={})
(@mock_company ||= mock_model(Company).as_null_object).tap do |company|
company.stub(stubs) unless stubs.empty?
end
end
'mock_user'と' mock_company'の内容を投稿できますか? – zetetic
まだ何かが欠けています。あなたはコントローラの '@ company'と' @ user'の値をどうやって設定しますか?コントローラは実際に 'User.new'を呼び出しますか? – zetetic