ActionController の verify と :xhr => true を指定したときの TestCase
ActionController には verify というクラスメソッドがあります。「request.method は :post か?」とか「params に :id が含まれているか?」といった検査を :only, :except に該当する action の実行前に行ってくれるものです。
update_name という action で POST かつ prototype.js の Ajax 呼び出しであることを検査する場合には、次のようにします。
class ArticleController < ActionController::Base verify :method => :post, :xhr => true, :only => :update_name def update_name ... end end
さらに、これに対するテストを書く場合 verify :xhr => true がやっている検査に合うようにヘッダを設定しないと verify に引っかかってしまいます(verify してるのだから)
@request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
こういう場合には ActionController::TestProcess#xml_http_request を使えば、ヘッダの設定を行った上で指定の action を実行してくれます。
class ArticleControllerTest < Test::Unit::TestCase def test_update_name xml_http_request :post, :update_name, { :id => 234, :name => "foobar" } # assert を書く end end