Использование RSpec2 для тестирования действия show контроллера

#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' }