RSpec with Rails 3.1除路由存在外,没有路由匹配错误

时间:2011-10-17 23:50:42

标签: ruby-on-rails rspec routes rails-3.1

有没有人知道为什么当我运行我的规格时它会说这条路线不存在,当它显然有效时?

以下是控制器中的相关代码:

class JobsController < ApplicationController
  before_filter :find_job, :only => [:show, :edit]
  respond_to :html, :json
  def show
    respond_with @job
  end
  def find_job
    @job = Job.find(params[:id])
  end
end

在routes.rb中:

resources :jobs

在规格中:

  def valid_attributes
    {}
  end

  describe "POST create" do
    context "with valid params" do
      it "redirects to the jobs path" do
        post :create, :job => valid_attributes
        response.should redirect_to job_path
      end
    end
  end

错误:

  1) JobsController when logged in as administrator POST create with valid params redirects to the jobs path
     Failure/Error: response.should redirect_to job_path
     ActionController::RoutingError:
       No route matches {:action=>"show", :controller=>"jobs"}

当我运行rake routes时,我得到:

    jobs GET    /jobs(.:format)                       {:action=>"index", :controller=>"jobs"}
         POST   /jobs(.:format)                       {:action=>"create", :controller=>"jobs"}
 new_job GET    /jobs/new(.:format)                   {:action=>"new", :controller=>"jobs"}
edit_job GET    /jobs/:id/edit(.:format)              {:action=>"edit", :controller=>"jobs"}
     job GET    /jobs/:id(.:format)                   {:action=>"show", :controller=>"jobs"}
         PUT    /jobs/:id(.:format)                   {:action=>"update", :controller=>"jobs"}
         DELETE /jobs/:id(.:format)                   {:action=>"destroy", :controller=>"jobs"}

1 个答案:

答案 0 :(得分:9)

job_path不是没有:id参数的有效路线。这应该有效:

job = assigns(:job)
response.should redirect_to job_path(job)