未找到Rspec控制器操作

时间:2015-12-13 18:31:07

标签: ruby-on-rails ruby rspec

测试失败,因为它表明行动不存在,当它显然有效时。是因为它是一个嵌套的路线吗?有什么想法吗?

更新

我将resources :orders移到了嵌套路由之外并且测试通过了。所以它与嵌套有关。

OrderController

def index
    if current_printer
      @orders = Order.all
      @printer = Printer.find(params[:printer_id])
    end
    if current_user
      @orders = Order.where(user_id: params[:user_id])
    end
end

OrdersController Spec

require 'rails_helper'

RSpec.describe OrdersController, :type => :controller do
  describe "unauthorized user" do
    before :each do
      # This simulates an anonymous user
      login_with_user nil
      binding.pry
    end

    it "should be redirected back to new user session" do
      get :index
      expect( response ).to redirect_to( new_user_session_path )
    end
  end
end

路线

resources :users, only: [:index, :show] do
      resources :orders
end

错误

Failures:

  1) OrdersController unauthorized user should be redirected back to new user session
     Failure/Error: get :index

     ActionController::UrlGenerationError:
       No route matches {:action=>"index", :controller=>"orders"}

1 个答案:

答案 0 :(得分:2)

测试具有嵌套路由的控制器时,必须传入url参数的散列。

例如我的路线看起来像这样

Date oldDate,newDate; SimpleDateFormat dateFormat; //editText1=2015-12-13 //editText2=2016-01-05 oldDate = dateFormat.parse(editText1.getText().toString()); newDate = dateFormat.parse(editText2.getText().toString()); oldDate=dateFormat.parse(dateFormat.format(oldDate)); newDate=dateFormat.parse(dateFormat.format(newDate)); long diff = newDate1.getDate() - oldDate1.getDate(); editText3.setText(""+(diff+1));

所以在我的测试中,我传入了一个带有user_id的哈希

user_orders GET /users/:user_id/orders(.:format) orders#index

测试通过:)