web-dev-qa-db-ja.com

Shoulda / RSpecマッチャー-条件付き検証

私のコードでは、Shoulderマッチャーで次の検証を行いましたが、正常に機能します:

it { should validate_presence_of(:name) }

私のモデルでは、検証に条件を追加しました:

validates_presence_of :name, :if => eligible?

検証に反映させることはできますか?

Shoulda matcherの documentation を見てみましたが、解決策を見つけることができませんでした。

どうもありがとう!

61
alexs333

Shoulda_matchersはこれを行うようには見えませんが、自分で簡単に記述できます。

  context "if eligible" do
    before { allow(subject).to receive(:eligible?).and_return(true) }
    it { should validate_presence_of(:name) }
  end

  context "if ineligible" do
    before { allow(subject).to receive(:eligible?).and_return(false) }
    it { should_not validate_presence_of(:name) }
  end
126
zetetic