RSpecでわざとCSRF対策に引っかかったフリをする

前提として

protect_from_forgery with: :exception

で例外を上げるようにしているものとする。

このうえで Controller Spec をこのように使って該当する例外を上げるようにするとイケる。

descibe FooController, type: :controller do
  controller {
    before_action {
      raise ApplicationController::InvalidAuthenticityToken
    }
  }

  it {
    post :create, params
  }
end

こんな感じ。controller instance に対して任意の before_action を追加できる RSpec つええ。

ちなみに RSpec 3.5 で試したところ、新しい Controller Spec の代わりにオススメされている Request Spec では上のような書き方で Controller の中身に手を加えることはできなかった。他に方法あるんだろうか。

参考

RailsのCSRF保護を詳しく調べてみた(翻訳)

More