Rails MinitestのController TestでCreate後のデータを取得する方法がわからない

現象

普通の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