У меня довольно простой проект на Rails 3, где я определил собственный маршрут:
get 'factions/:name' => 'factions#show', :as => :factions
get 'factions' => 'factions#index'
... который при запуске rails s
дает мне ожидаемую страницу (http://localhost:3000/factions/xyz
- это HTTP 200 с отображаемым app/views/factions/show.html.haml
). Однако я попробовал несколько разных способов выражения спецификации, которая будет работать, ниже мое последнее воплощение:
require 'spec_helper'
describe FactionsController do
render_views
describe "GET 'show'" do
before { get '/xyz' }
subject { controller }
it { should respond_with(:success) }
it { should render_template(:show) }
end
describe "GET 'index'" do
it "should be successful" do
get 'index'
response.should be_success
end
end
end
Спецификация GET 'index'
проходит без жалоб, но независимо от того, что я делаю, спецификации GET 'show'
не могут пройти - даже если они успешны, когда я просматриваю их локально.
1) FactionsController GET 'show'
Failure/Error: before { get '/xyz' }
ActionController::RoutingError:
No route matches {:controller=>"factions", :action=>"/xyz"}
# ./spec/controllers/factions_controller_spec.rb:7:in `block (3 levels) in <top (required)>'
Действие действительно должно быть show
, но моя routes.rb
конфигурация должна быть неправильной или что-то в этом роде. Что дает?
(Дополнительный контекст: я использую bundle exec spork
для ускорения своих спецификаций, и я несколько раз перезагружал сервер spork
, чтобы убедиться, что я не совсем ненормальный.)