使用RSpec测试控制器显示操作

时间:2011-06-08 01:02:42

标签: ruby ruby-on-rails-3 routes 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 个答案:

答案 0 :(得分:1)

变化:

before { get '/xyz' }

要:

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