如何使用RSPEC中的FactoryGirl测试是否已创建了新记录



如何使用FactoryGirl编写User.find_user_id类方法的测试?

Class User < ActiveRecord::Base
   def self.find_user_id (name)
     result = User.find_or_create_by(name: name)
    return result.id
   end
end

编辑:我没有第一次让自己清楚。我在测试中想要的只是调用User.find_user_id时, User.find_or_create_by命中率。

我使用了expect(User).to received(:find_or_create_by),但这将使result = nil和返回语句return result.id导致undefined method 'id' for nil:NilClass的错误。我正在考虑使用FactoryGirl创建一个新记录,因此我不会收到此错误消息。但是我不确定这是正确的方法,因为我是RSPEC/RAILS

的新方法

您可以使用有效吗?在Rails模型中检查FactoryGirl create在您的模型规格中的功能

RSpec.describe User, :type => :model do
  let(:user) { FactoryGirl.create(:user) }
  it { is_expected.to be_valid }
end

FactoryBot(请注意,FactoryGirl在几周前重命名)具有linter的构建,以确保所有工厂都会生成有效的实例。请参阅其文档中的覆盖工厂。

一个非常简单的示例如何使用衬里可能看起来像这样:

# spec factory_linter_spec.rb
require 'spec_helper'
Rspec.describe 'FactoryBot' do
  it 'creates valid instances' do
    FactoryBot.lint
  end
end

1.您将需要User型号的工厂如下:

FactoryGirl.define do
  factory :user do
    name: 'Stefen'
  end
end

2.当您的类方法find_user_id返回一个用户的ID,其name传递给该方法。因此,规格可以如下写:

describe '.find_user_id' do
  before do
    @user = FactoryGirl.create(:user)
  end
  it 'should find user id by name' do
    find_user_id(@user.name).should eq @user.id
  end
end

3.在RSPEC中,它应该验证您的类方法find_user_id返回id

最新更新