rspec-railsのドキュメント読み
以前から何度かはRailsとRSpecに関する事書いてるけど、ちゃんとドキュメント読みましょうって事で、 https://www.relishapp.com/rspec/rspec-rails/docs を読み進めてみる
Anonymous Controller
Anonymous Controllerは要はコントローラーにメソッド定義しちゃったりしてテストするって感じなのかと。例えばapplication_controller.rbが
class AccessDenied < StandardError; end
class ApplicationController < ActionController::Base
protect_from_forgery
rescue_from AccessDenied, :with => :access_denied
private
def access_denied
render :status => :forbidden, :nothing => true
end
end
まぁAccessDeniedがraiseされたらHTTP403を出すような感じ。でテストを
require "spec_helper"
describe ApplicationController do
controller do
def index
raise AccessDenied
end
end
it "GET #index" do
get :index
expect(response).not_to be_success
expect(response.status).to be(403)
end
end
っていう感じでコントローラーにアクションぶち込んでそれにアクセスしてテストする。ちなみに
it "GET #index" do
def controller.index
render :status => :not_found, :nothing => true
end
get :index
expect(response).not_to be_success
expect(response.status).to be(404)
end
っていう風に書く事も可能っぽい
bypass_rescue
んでbypass_rescueはrescue_fromを無視しちゃう感じな表現でええんやろか。んまぁそんな感じだろうとは思うんですが、要はrescue_fromで指定した:withに飛ばさずに例外を発生させられるっていう所なんだと思われる。実体をソースを読んだ所だと
module ByPassRescue
def rescue_with_handler(exception)
raise exception
end
end
def bypass_rescue
controller.extend(ByPassRescue)
end
みたいな感じになってた。
require "spec_helper"
describe ApplicationController do
controller do
def index
raise AccessDenied
end
end
it "GET #index" do
bypass_rescue
expect { get :index }.to raise_error(AccessDenied)
end
end
みたいにbypass_rescueをしない場合だと、rescue_fromで指定されたように403エラーになる。bypass_rescueをした場合だとraiseされたエラーがそのまま送出されるっていう感じかと
Capybara-WebKitを使う
Rails3+RSpecでのテストを勉強してみる (3) – capybara-webkitを使ってみる -で書いてるので(ry
ヘルパーのテスト
Rails3+RSpecでのテストを勉強してみる (4) – コントローラー及びヘルパーのテスト -を参照
モデルのテスト
Rails3+RSpecでのテストを勉強してみる (1)で書いてるので(ry
以上。とりまぁまだActionMailerとかまで進んでないので部分的な所は省略。まだ読んでない所もあるので逐一追記したりする予定