如何在rspec中创建测试数据

时间:2018-03-26 17:44:29

标签: ruby-on-rails unit-testing rspec

您好我正在使用ruby-2.5.0和Rails 5处理rails应用程序。我必须测试我的forgot_password控制器,有一种方法可以验证电子邮件ID是否在数据库中存在。

MyObject.create({
    id: 1,
    name: "object_1",
    ...
    buttons: [
         {
              name: "OK",
              action: "Accept"
         },
         {
              name: "No",
              action: "Cancel"
         }
    ]    
});

我想测试我的api。我已经编写了如下单元测试: -

|  obj_id  |  prop  |  type  |  value    | 
|     1    |  id    |   int  |   1       | 
|     1    |  name  |   str  |  object_1 |
 ... 
|     2    |  id    |   int  |   2       | 
|     2    |  name  |   str  |  object_2 |

现在我想用'let'创建测试数据  喜欢

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

如何创建用户请让我帮帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我会考虑使用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) }