[英]How to create test data in rspec
嗨,我正在使用ruby-2.5.0和Rails 5開發Rails應用程序。我必須測試我的forgot_password控制器,這里有一種方法可以驗證數據庫中是否存在電子郵件ID。
forgot_password_controller.rb
# frozen_string_literal: true
class ForgotPasswordController < ApplicationController
def create
user = User.find_by_email(forgot_password_params[:email])
unless user.blank?
render json: {}, status: 200
else
render json: {}, status: 404
end
rescue StandardError
render json: {}, status: 500
end
private
def forgot_password_params
permitted = %i[email]
params.require(:data)
.require(:attributes)
.permit(permitted)
.transform_keys(&:underscore)
end
end
我想測試我的api。 我已經編寫了如下單元測試:
forgot_password_controller_spec.rb
# frozen_string_literal: true
require 'rails_helper'
describe ForgotPasswordController do
before do
User.create!(email: 'xyz@gmail.com',
password: 'pass',
password_confirmation: 'pass')
end
describe 'POST create' do
subject { post :create, params: params }
context 'when email is found' do
let(:params) do
{ data: { attributes: { email: 'xyz@gmail.com' } } }
end
it { is_expected.to have_http_status(200) }
end
context 'when email is not found' do
let(:params) do
{ data: { attributes: { email: 'xyz2@gmail.com' } } }
end
it { is_expected.to have_http_status(404) }
end
context 'when wrong params passed' do
let(:params) do
{ data: '' }
end
it { is_expected.to have_http_status(500) }
end
end
end
現在我想用'let'創建測試數據
let(:user) { instance_double('user') }
let(:save_result) { true }
我該如何創建用戶,請幫助我。 提前致謝。
我會考慮使用FactoryBot aka FactoryGirl,因為它可以使編寫這些內容變得更加容易。 但是對於您的情況,這應該是您想要的:
let(:user) { User.create!(email: 'xyz@gmail.com', password: 'pass', password_confirmation: 'pass') }
如果您擁有FactoryBot,則可以使用以下方法簡化該操作:
let(:user) { create(:user) }
或者可能是為了獲得更好的性能,如果您實際上不需要創建而是僅創建一條記錄:
let(:user) { build_stubbed(:user) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.