#ruby #ruby-on-rails-3 #routes #rspec2
#ruby #ruby-on-rails-3 #маршруты #rspec2
Вопрос:
У меня есть довольно простой проект 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
сервер несколько раз, просто чтобы убедиться, что я не совсем сумасшедший.)
Комментарии:
1. Также попробуйте
rake routes
убедиться, что маршрут существует так, как вы ожидаете.
Ответ №1:
Изменение:
before { get '/xyz' }
Для:
before { get :show, :name => 'xyz' }