【问题标题】:Ruby on Rails - Rspec - Controller test - nested routeRuby on Rails - Rspec - 控制器测试 - 嵌套路由
【发布时间】:2014-03-17 23:22:53
【问题描述】:

我得到了一个非常基本的控制器测试

require 'spec_helper'

describe Admin::OrdersController do 

    describe "GET #order_detail" do 
        before :each do 
            new_admin = FactoryGirl.create(:admin)
            sign_in new_admin
            @storefront = FactoryGirl.create(:storefront)
            @order = FactoryGirl.create(:order)

         end

         it "assigns the requested order to @order" do
             get :order_detail, { :storefront_id => @storefront.id, :order_id => @order.id }
             assigns(:order).should eq(@order)
         end

         it "renders the :show template" do
             get :order_detail, {:storefront_id => @storefront.id, :order_id => @order.id}
             response.should render_template :order_detail
         end
    end 
end

这两种操作都会出现以下错误:

ActionController::RoutingError:
    No route matches {:storefront_id=>"14", :order_id=>"1", :controller=>"admin/orders", :action=>"order_detail"}

来自 routes.rb:

resources :storefronts do
  resources :orders do
    member do
      get :order_detail
    end
  end
end

我想

get :order_detail, { :storefront_id => @storefront.id, :order_id => @order.id }

这将是生成路线的正确方法,但不幸的是它不是。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec


    【解决方案1】:

    您可以在应用程序根目录中使用rake routesbundle exec rake routes 查看Rails 生成的路由。我在一个全新的 Rails 应用程序中进行了相同的资源设置,并且 rake routes 输出如下(仅用于订单详细路由):

    order_detail_storefront_order GET      /storefronts/:storefront_id/orders/:id/order_detail(.:format)                   orders#order_detail
    

    如您所见,rails 期待的是:id 而不是:order_id。尝试将 :order_id 更改为 :id 作为规范中的参数键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多