フロントエンドとしてバックボーンを使用して、Rails3.2で記述されたJSONAPIの一連のrspecテストを作成しようとしています。私が書いているテストは、特にRailsコントローラー用です。
これで、アプリケーション自体は正常に機能しています。クライアントが本体を使用してPUT要求を発行する場合:
{
"id":1,
"name":"updated product set",
...
}
すべてが素晴らしいです。バックグラウンドで、Railsはそのボディを取得し、次のように変換します。
{
"id":1,
"name":"updated product set",
...
"model_name" => { ... }
}
ここで、ハッシュ「model_name」が指す属性値には、入力から自動的に把握できる属性値が含まれています。すべては順調です。
テスト環境からまったく同じリクエストを試してみると、すべてがうまくいきません。上記とまったく同じPUT本体ハッシュであるが、rspecでハッシュを作成する場合:
@update_json = {
"id":1,
"name":"updated product set",
...
}
header "Accept","application/json"
header "Content-type","application/json"
put :update, @update_json
物事はまったくうまくいきません。コントローラで、params変数を調べると、次のようになります。
{ "model_name" => {} }
「Content-type」ヘッダー行を省略すると、代わりに@update_jsonが取得されますが、コントローラーで必要な「model_name」マッピングを作成するRails操作はありません。
テストを成功させる唯一の方法は次のとおりです。
@update_json = {
:format => "json",
"id":1,
"model_name" => {
"id":1,
"name":"updated product set",
...
}
}
header "Accept","application/json"
put :update, @update_json
ただし、これは実際のテストではありません。これは、バックボーンフロントエンドによって送信される正確なPUT本体をテストしていないためです。
何か案は?
更新:周りを見渡すと、rspecから実際のHTTPリクエストを実際に行うことはできないようです。ただモックアップされています。たとえば、Railsは通常Railsネットワークスタックによってキャッチされて404に変換される例外をスローするため、システムに404で応答させることはできませんが、Rspecでは応答しません。したがって、問題は上記よりも深く見えます...