简体   繁体   中英

Rails API RSpec Test

I'm new to rails api rspec and somehow I cannot make the test work. Can someone provide some inputs in the tests? The models and controllers are more like a pseudocode. I appreciate it. Thank you.

# routes.rb
Rails.application.routes.draw do
  resources :users, :only [:create]
end

# app/model/user.rb
class User < ApplicationRecord
  validates_uniqueness_of :name
end

# app/controllers/users_controller.rb
def create
    @user = User.new(user_params)
    if @user.save
        head 200
    else
        render json: { error: 'Failed', status: 400}, status: 400
    end
end

def user_params
    params.require(:user).permit(:name)
end

# RSpec Test
require 'rails_helper'
RSpec.describe UsersController do
    describe '#create' do
        context 'the parameter "user[name]"" is blank' do
            it 'creates new user' do
                #Test Here
            end

            it 'renders empty response' do
                #Test Here
            end

            it 'renders response with status 200' do
                #Test Here
            end
        end
    end
end

spec/models/user_spec.rb make sure you install gem shoulda-matchers and factory_bot_rails

require 'rails_helper'

RSpec.describe User, type: :model do
  let(:user) { create(:user) }

  describe "validation" do
    it { should validate_uniqueness_of(:name) }
  end
end

spec/controllers/users_controller_spec.rb

require 'rails_helper'

RSpec.describe UserssController, type: :controller do
  describe "POST /users" do
    it "when create user successfully return status 200" do  
      post :create, params: { name: "name" }
      expect(response.status).to eq 200
    end

    it "when create user errors return status 400" do  
      post :create, params: { name: "name duplicate" }
      expect(response.status).to eq 400
    end
  end
end

I hope it helps for you

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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