現象
普通のControllerと同じにようにデータの中身を取得しようとしたところ、「200」しか出力されない。
ターミナル:
% rails test
Running 4 tests in a single process (parallelization threshold is 50)
Run options: --seed 58290
# Running:
200 ←これしかデータ取得できない
....
Finished in 0.171560s, 23.3155 runs/s, 17.4866 assertions/s.
4 runs, 3 assertions, 0 failures, 0 errors, 0 skips
test/controllers/bankbooks_controller_test.rb:
test "should get index" do
b = get bankbooks_url, as: :json
p b
end
原因
データ取得の方法がそもそも間違っているため。getで取得したあとは、@responseにデータの中身(レスポンスデータ)が入る。
Rails テスティングガイド - 8.5 利用可能なインスタンス変数
引用:
機能テストでは、1つのリクエストの完了ごとに以下の3つの専用インスタンス変数を使えます。
@controller - リクエストを処理するコントローラ
@request - リクエストオブジェクト
@response - レスポンスオブジェクト
class ArticlesControllerTest < ActionDispatch::IntegrationTest
test "should get index" do
get articles_url
assert_equal "index", @controller.action_name
assert_equal "application/x-www-form-urlencoded", @request.media_type
assert_match "Articles", @response.body
end
end
対応
Rails テスティングガイド を参考に以下のように書き直して、無事にデータの中身が取得できた。
test/controllers/bankbooks_controller_test.rb:
test "should get index" do
get bankbooks_url, as: :json
p @response.body
# または @ なしでもデータ取得できる
# p response.body
end