Rspec控制器RoutingError

时间:2012-03-02 10:18:58

标签: rspec rspec-rails

我定义了以下路线

  match '/admin', :to => "admin/dashboard#index", :module => "admin"
  match '/admin/sales', :to => "admin/dashboard#sales", :module => "admin"

在dashboard_controller_spec中,我希望使用以下内容:

describe Admin::DashboardController do
  describe "#sales" do
    it "should set schedule" do
      get :sales
      assigns(:schedule).should_not be_nil
    end
  end
end

当我运行测试时,我收到以下错误:

ActionController::RoutingError: No route matches {:action=>"sales", :controller=>"admin/dashboard"}

有什么想法吗? 我的猜测与模块有关。

谢谢,

2 个答案:

答案 0 :(得分:1)

请注意您在分配中有拼写错误(您有 assings )。

我已经能够成功复制这个确切的规范(Rails 3)。

dashboard_controller.rb文件必须位于app/controllers/admin/内 这是我的快速测试:

class Admin::DashboardController < ApplicationController
  def sales
    @schedule = "test"
    render :nothing => true 
  end
end

结果:

$ bundle exec rspec spec/controllers/dashboard_controller_spec.rb 
creating sqlite in memory database

Admin::DashboardController
  #sales
    should set schedule

Finished in 1.25 seconds
1 example, 0 failures

答案 1 :(得分:0)

我正在为我的公司开发一个Rails引擎gem,它为我们正在运行的应用程序提供API。我们仍在使用Rails 3.0.9,最新的Rspec-Rails(2.10.1)。我有类似的问题,我已经定义了这样的路线:

match '/companyname/api_name' => 'CompanyName/ApiName/ControllerName#apimethod'

我遇到了类似的错误:

ActionController::RoutingError:
 No route matches {:controller=>"company_name/api_name/controller_name", :action=>"apimethod"}

我花了很多时间试图弄清楚如何让我的测试工作。不同版本的Rspec,使用嵌套范围重新定义我的路线等。

事实证明我只需要在下划线的情况下重新定义我的路线,以便RSpec可以匹配它。

match '/companyname/api_name' => 'company_name/api_name/controller_name#apimethod'

我猜Rspec控制器测试使用基于下划线情况的反向查找,而如果您在camelcase或下划线情况下定义它,Rails将设置和解释该路由。