[解決済み] RSpecを使用してJSONの応答を確認する方法は?
2022-04-26 03:36:34
質問
コントローラ内に以下のようなコードがあります。
format.json { render :json => {
:flashcard => @flashcard,
:lesson => @lesson,
:success => true
}
RSpecのコントローラテストでは、あるシナリオが成功のjsonレスポンスを受け取ることを確認したいので、以下の行を用意しました。
controller.should_receive(:render).with(hash_including(:success => true))
しかし、テストを実行すると、次のようなエラーが発生します。
Failure/Error: controller.should_receive(:render).with(hash_including(:success => false))
(#<AnnoController:0x00000002de0560>).render(hash_including(:success=>false))
expected: 1 time
received: 0 times
レスポンスの確認方法が間違っているのでしょうか?
解決方法は?
レスポンスオブジェクトを調べ、期待される値が含まれているかどうかを確認することができます。
@expected = {
:flashcard => @flashcard,
:lesson => @lesson,
:success => true
}.to_json
get :action # replace with action name / params as necessary
response.body.should == @expected
EDIT
に変更すると
post
は少し厄介になります。ここでは、その対処法を紹介します。
it "responds with JSON" do
my_model = stub_model(MyModel,:save=>true)
MyModel.stub(:new).with({'these' => 'params'}) { my_model }
post :create, :my_model => {'these' => 'params'}, :format => :json
response.body.should == my_model.to_json
end
なお
mock_model
には反応しません。
to_json
ということで、どちらか
stub_model
または実際のモデルインスタンスが必要です。
関連
-
[解決済み] Rubyの文字列から日付への変換
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] rails erb フォームヘルパー options_for_select :selected
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] JSON APIのレスポンス形式には規格がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] PG::ConnectionBad - サーバーに接続できませんでした。接続が拒否されました。
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] Railsはsaveでモデル内の検証をスキップしますか?
-
[解決済み] Rspec が私のモデルクラスを認識しない。初期化されていない定数エラー
-
[解決済み] railsでcheck_boxをcheckedにする方法は?
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
-
[解決済み] 属性とカラムの違いは何ですか?
-
[解決済み] Railsコンソール:リロード!モデルファイルの変更が反映されない?考えられる理由は何でしょうか?