メインコンテンツまでスキップ

route_to マッチャー

route_to マッチャーは、リクエスト(動詞 + パス)がルーティング可能であることを指定します。 これは、標準の RESTful ルート以外のルートを指定する際に最も有用です。

expect(get("/")).to route_to("welcome#index") # 2.6.0 で新しく追加されました

または

expect(:get => "/").to route_to(:controller => "welcome")

ショートカット構文を使用したルート仕様のパス

次の内容で "spec/routing/widgets_routing_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe "routes for Widgets", type: :routing do
it "routes /widgets to the widgets controller" do
expect(get("/widgets")).
to route_to("widgets#index")
end
end

rspec spec/routing/widgets_routing_spec.rb を実行すると

すべての例がパスするはずです。

冗長な構文を使用したルート仕様のパス

次の内容で "spec/routing/widgets_routing_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe "routes for Widgets", type: :routing do
it "routes /widgets to the widgets controller" do
expect(:get => "/widgets").
to route_to(:controller => "widgets", :action => "index")
end
end

rspec spec/routing/widgets_routing_spec.rb を実行すると

すべての例がパスするはずです。

存在しないルートのルート仕様(失敗する)

次の内容で "spec/routing/widgets_routing_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe "routes for Widgets", type: :routing do
it "routes /widgets/foo to the /foo action" do
expect(get("/widgets/foo")).to route_to("widgets#foo")
end
end

rspec spec/routing/widgets_routing_spec.rb を実行すると

出力に "1 failure" が含まれるはずです。

ショートカット指定子を使用した名前空間付きルートのルート仕様

次の内容で "spec/routing/admin_routing_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe "routes for Widgets", type: :routing do
it "routes /admin/accounts to the admin/accounts controller" do
expect(get("/admin/accounts")).
to route_to("admin/accounts#index")
end
end

rspec spec/routing/admin_routing_spec.rb を実行すると

すべての例がパスするはずです。

冗長な指定子を使用した名前空間付きルートのルート仕様

次の内容で "spec/routing/admin_routing_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe "routes for Widgets", type: :routing do
it "routes /admin/accounts to the admin/accounts controller" do
expect(get("/admin/accounts")).
to route_to(:controller => "admin/accounts", :action => "index")
end
end

rspec spec/routing/admin_routing_spec.rb を実行すると

すべての例がパスするはずです。