测试失败,因为它表明行动不存在,当它显然有效时。是因为它是一个嵌套的路线吗?有什么想法吗?
更新
我将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"}
答案 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
测试通过:)