1. ホーム
  2. ruby-on-rails

[解決済み] 私のモデル検証をバイパスしたファクトリーガールの作成

2023-05-22 21:25:40

質問

私は、グループのモデル/ユニットテストで2つのインスタンスを作成するためにファクトリーガールを使用しています。私は、.currentへの呼び出しが、以下のようにexpiry属性に従って「現在の」グループのみを返すことを確認するためにモデルをテストしています...

  describe ".current" do
    let!(:current_group) { FactoryGirl.create(:group, :expiry => Time.now + 1.week) }
    let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }

    specify { Group.current.should == [current_group] }
  end

私の問題は、新しいグループの有効期限が今日の日付より後であることをチェックするバリデーションをモデルで行っていることです。これは、以下のような検証の失敗を発生させます。

  1) Group.current 
     Failure/Error: let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }
     ActiveRecord::RecordInvalid:
       Validation failed: Expiry is before todays date

ファクトリーガールを使って作成する際に、強制的にグループを作成する方法、またはバリデーションを回避する方法はありますか?

解決方法を教えてください。

これはFactoryGirlに限ったことではありませんが、モデルを保存する際、常にバリデーションを回避するために save(validate: false) :

describe ".current" do
  let!(:current_group) { FactoryGirl.create(:group) }

  let!(:old_group) do
    g = FactoryGirl.build(:group, expiry: Time.now - 3.days)
    g.save(validate: false)
    g
 end
      
 specify { Group.current.should == [current_group] }
end