2011-12-13 20:21:47 +0900
Railsで、サブドメインやドメインによる制約のかかったルーティングのテストをどう書くか。
以下のようにサブドメインによってコントローラが変わるルーティング定義をした場合、
# config/routes.rb
root :to => 'admin/dashboard#index', :constraints => { :subdomain => 'admin' }
root :to => 'dashboard#index'
RSpecでのルーティングのテストはこう書く。
# spec/routing/root_routing_spec.rb
context "admin.example.com" do
describe "GET /" do
subject { { :get => 'http://admin.example.com/' } }
it { should be_routable }
it { should route_to(:controller => 'admin/dashboard', :action => 'index') }
end
end
describe "GET /" do
subject { { :get => root_path } }
it { should be_routable }
it { should route_to(:controller => 'dashboard', :action => 'index') }
end
RequestスペックのほうではCapybaraの設定を変更して、サブドメインが指定された状態にする。
# spec/requests/*_spec.rb
before(:all) do
Capybara.default_host = "admin.example.com"
Capybara.app_host = "https://admin.example.com" if Capybara.current_driver == :culerity
end