Sooey

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