Railsのコンソールからコントローラのアクションを呼び出す方法

メモ
Railsのコンソールからコントローラのアクションを呼び出せるとちょっとしたテストに便利そうだなと思っていたらやっぱりできるようだ。

ruby script/console

# ①URIとメソッドを指定する。
ENV['REQUEST_URI'] = "/example/index/"
ENV['REQUEST_METHOD'] = "get"

# ②ディスパッチする。
Dispatcher.dispatch

ディスパッチすると以下のようにレスポンスがコンソールに出力される。

Content-Type: text/html; charset=utf-8
Set-Cookie: _session=BAh7BiIKZmxhc24501464578d2f; path=/
Status: 200 OK
X-Runtime: 3.65600
ETag: "005422c12879c39354fa7eed463836a1"
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 13716

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
以下省略

普段ブラウザからアクセスする際にApacheなどのWebサーバは①②の処理をしているのだとか。
毎回この記述をするのは面倒なので以下のようなヘルパーを用意してあげると便利そうだ。

def manually_dispatch(uri, method = :get)
  ENV['REQUEST_URI'] = uri
  ENV['REQUEST_METHOD'] = method.to_s
  Dispatcher.dispatch
end

# こんな感じに使う
manually_dispatch "/example/index/"

postでパラメータを付けたい場合はどうするんだろうな?