0

APIのRSpecテストを作成しようとしています。

セットアップ: 一貫性を保つために、応答を受け取り、すべてが一貫しているように優れたJSONオブジェクトを作成するフォーマット関数があります。たとえば、この例では簡略化されています。

def format (status, message)
  {status: status,
   message: message}
end

この関数は、すべてのAPIコントローラーが継承するベースコントローラーで宣言されます。

必要なもの: APIコントローラーをテストするときに、コントローラーが期待どおりの結果を提供することをテストしたいのですが、JSON応答の実際の形式をテストしたくありません。のように、format関数に渡されたパラメーターが期待どおりであることを確認したいのですが、その関数が実際に何を返すかは確認したくありません。(別のテストでその関数をテストすることを計画しています。JSON形式への変更がAPIのすべてのテストに影響を与えない場合は、本当に欲しいです。これが適切でない場合は、遠慮なくお知らせください。 )。

私の質問: 現在のAPIスペックファイルのベースコントローラーからそのフォーマット関数にアクセスする方法はありますか?または、それをスタブして、渡されたパラメータにアクセスして、それらが正しいかどうかを確認するための良い方法はありますか?

関連:RSpecを使用してJSON応答を確認する方法は?

4

1 に答える 1

1

コントローラの仕様で次のようなことをしようとしているようです。

let(:status) { function1(params_hash) }
let(:message { function2(params_hash) }
it "does something something" do
  model.should_receive(:format).with(status, message)
  get :action, params_hash
 end

params_hashからステータスとメッセージを計算する方法を定義するのはあなた次第です。私がやっていることは、さまざまなパスが何であるかを考え、それぞれのテストを作成することです。そのような:

context "when id is missing in the params" do
 let(:status) { 404 }
 let(:message) { "Not found" }
 let(:params_hash) { {:id => nil} }

context "when id is correct" do
  let(:status) { 200 }
  let(:message) { "OK" }
  let(:params{hash) { {:id => 1 } }
于 2013-03-13T21:54:17.650 に答える