我有users_controller.rb
,其中包括:
before_action :set_user, only: [:show, :edit, :update, :destroy]
load_and_authorize_resource
def index
@users = User.all
end
def show
end
def new
@user = User.new
end
private
def set_user
@user = User.find(params[:id])
end
我的config/routes
包括:
devise_for :users
devise_scope :user do
authenticated :user do
root 'switchboard#show', as: :authenticated_root
end
unauthenticated do
root 'devise/sessions#new', as: :unauthenticated_root
end
end
resources :users
当我导航到http://localhost:3000/users
时,我得到了我期望的用户列表。但是当我运行RSpec测试时:
require 'rails_helper'
RSpec.describe UsersController, :type => :controller do
describe "GET show" do
it "returns http success" do
get :show
expect(response).to be_success
end
end
end
我在RSpec专线No route matches {:action=>"show", :controller=>"users"}
上收到错误get :show
。
我发现了无数关于No route matches {:action=>"show"
的查询,每个查询都有不同的原因,但似乎没有一个与我的相符。我该怎么做才能解决这个问题(除了不测试功能之外!)
答案 0 :(得分:10)
因为您没有与控制器user
操作show
但是,你确实有一条匹配user/:id
的路线(它是你遗漏的:id
)
所以你可以......
get :show, id: 1