rails consoleからControllerにリクエストを送る方法

Ruby

基本構文

appオブジェクトを利用することでrails console上からControllerへリクエストを送れます。
基本構文は以下の通りです。

### パラメーターなしの場合
$ app.[リクエストメソッド] [パス]

### パラメーターありの場合
$ app.[リクエストメソッド] [パス], params: [パラメータ]

helperオブジェクトを利用すると以下のように記述できます。

### パラメーターなしの場合
$ app.[リクエストメソッド] app.[URLヘルパーを利用したパス名]

### パラメーターありの場合
$ app.[リクエストメソッド] app.[URLヘルパーを利用したパス名], params: [パラメータ]

リクエストの結果はapp.response.bodyで取得できます。

具体例

class HealthController < ApplicationController
  def show
    render json: { message: 'ok' }, status: :ok
  end
end

上記のようなapp/health_controller.rb#showrails consoleからリクエストを送る場合は以下のようになります。

$ rails c

# app.get "/health" でもOK
> app.get app.health_path
=> 200

> JSON.parse(app.response.body)
=> {"message"=>"ok"}

以下の結果をみてわかる通り、引数paramsはController上でActionController::Parametersとして扱われます。

> app.get app.health_path, params: { name: 'foo' }

From: /app/app/controllers/health_controller.rb:3 HealthController#show:

    2: def show
 => 3:   binding.pry
    4:   render json: { message: 'ok' }, status: :ok
    5: end

> params
=> #<ActionController::Parameters {"name"=>"foo", "controller"=>"health", "action"=>"show"} permitted: false>

> params.class
=> ActionController::Parameters

> params[:name]
=> "foo"

参考資料