Использование RSpec2 для проверки действия show контроллера - PullRequest
0 голосов
/ 08 июня 2011

У меня довольно простой проект на 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 Ответ

1 голос
/ 08 июня 2011

Изменение:

before { get '/xyz' }

Кому:

before { get :show, :name => 'xyz' }
...