8

OrgController使用するようにリファクタリングしましrespond_withたが、コントローラー仕様のスキャフォールドが次のメッセージで失敗しています。

1) OrgsController POST create with invalid params re-renders the 'new' template
   Failure/Error: response.should render_template("new")
     expecting <"new"> but rendering with <"">

仕様は次のようになります。

it "re-renders the 'new' template" do
 Org.any_instance.stub(:save).and_return(false)
 post :create, {:org => {}}, valid_session
 response.should render_template("new")
end

:errorsエラーがあるように見せるためにハッシュをスタブする必要があることを読みました。それを行う最善の方法は何ですか?

4

4 に答える 4

14

v3 で導入された RSpec の新しい構文を使用すると、スタブは次のようになります。

allow_any_instance_of(Org).to receive(:save).and_return(false)
allow_any_instance_of(Org).to receive_message_chain(:errors, :full_messages)
  .and_return(["Error 1", "Error 2"])

関連するコントローラ コードは次のようになります。

if org.save
  head :ok
else
  render json: {
    message: "Validation failed",
    errors: org.errors.full_messages
  }, status: :unprocessable_entity # 422
end
于 2014-12-02T10:42:16.877 に答える
1

有効なスタブを作成する必要がありますか? 方法:

Org.any_instance.stubs(:valid?).and_return(false)

無効になるため、オブジェクトは保存されません

于 2012-07-03T19:59:16.073 に答える