简体   繁体   English

如何在rspec中测试show方法

[英]how to test show method in rspec

How do I format the following line to do a request to /users/1 ? 如何格式化以下行以向/users/1发出请求?

get :show, {format: :json, id: @user1.id }

I have tried every permutation and bracket arrangement 我已经尝试了所有排列和括号排列

Resulting error: 产生的错误:

NoMethodError:
           undefined method `json' for #<UsersController

The entire spec file: 整个规格文件:

describe UsersController, :type => :controller do require 'database_cleaner' 描述UsersController,:type =>:controller确实需要'database_cleaner'

DatabaseCleaner.strategy = :truncation

describe "GET users" do
    before(:all) do 
        @user1 = FactoryGirl.create :user, name: "Yakov", default_pull_rate: 10, default_push_rate: 9 
        @user2 = FactoryGirl.create :user, name: "Smirnov", default_pull_rate: 15, default_push_rate: 1
        @user1.save
        @user2.save

        @player1 = FactoryGirl.create :player, user_id: 1
        @player1.save
    end

    it "returns all users" do 
        get :index, :format => :json

        expect(response.status).to eq 200

        body = JSON.parse(response.body)
        user_names = body.map { |u| u["name"] } 

        expect(user_names).to match_array(["Yakov", "Smirnov"])

    end

    it "returns player for a user" do 

        get :show, {format: :json, id: @user1.id }

        expect(response.status).to eq 200
    end

    DatabaseCleaner.clean

end

end 结束

Controller: 控制器:

class UsersController < ApplicationController
    include ActionController::MimeResponds

  def index
    @users = User.all
    respond_to do |format|
        format.json { render json: @users }
    end
  end

  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.json { render json @user } 
    end
  end

  def create
    @user = PowerUp.new(params[:user])
        @user.save!
  end
end

Your test is working perfectly. 您的测试运行良好。 It is actually showing you a problem in your controller. 它实际上向您显示了控制器中的问题。

In your show action, you have show动作中,

format.json { render json @user } 

It should be 它应该是

format.json { render json: @user } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM