2

サーバーエラーのAPIテストケースを書いています。サーバーエラー(500)をシミュレートするために、コントローラーアクションをスタブしてエラーを発生させたい。リクエスト仕様では、controller変数は設定されていません。

it "Should return 500 upon server error" do
  controller.stub(:index).and_raise(ArgumentError) 
  get "/users.json"
  response.code.should eq("500")
end
4

2 に答える 2

4

を使用してコントローラーメソッドをスタブ化することになりましたany_instance

it "Should return 500 upon server error" do
  UsersController.any_instance.stub(:index).and_raise(ArgumentError)
  get "/users.json"
  response.code.should eq("500")
  response.body.should have_json_path("error")
end

ノート:

リクエスト仕様にコントローラーメソッドをスタブすることは意味がありません。しかし...この場合、私は受け入れ基準としてリクエストスペックスイートを使用しています。要件の1つは、すべてのエラーコードとメッセージがAPI設計と一致することを確認することでした。サーバーに、API設計で指定されたすべてのHTTPエラーコードを発生させることができました。エッジケースのみでしたinternal server error(i.e. 500)。このエラーを発生させるようにコントローラーを誘導する手段がありませんでした。以来、私はエラー応答をテストしており、この応答は例外の場所とソースに依存しないため、スタブ化することにしました。

于 2012-05-25T04:04:00.053 に答える
0

これは実際にはインスタンス変数です:@controller

于 2012-05-24T18:34:55.000 に答える