没有路由匹配RSpec中的{:action =>“show”,在浏览器中没问题

时间:2015-02-20 19:59:20

标签: ruby-on-rails-4 rspec

我有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"的查询,每个查询都有不同的原因,但似乎没有一个与我的相符。我该怎么做才能解决这个问题(除了不测试功能之外!)

1 个答案:

答案 0 :(得分:10)

因为您没有与控制器user操作show

匹配的路由

但是,你确实有一条匹配user/:id的路线(它是你遗漏的:id

所以你可以......

get :show, id: 1