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でパラメータを付けたい場合はどうするんだろうな?