簡體   English   中英

如何在RSpec中創建測試數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM