Shoulda Matchers: how to test conditional validations

Posted . Visible to the public.

Shoulda Matchers Show archive.org snapshot don't provide canditional validations (validations with if: option). Here is how to write tests for the condition:

Class:

class Employee < ActiveRecored::Base
  validates :office, presence: true, if: manager?
  
  def manager?
    ...
  end
end

Test:

describe Employee do

  describe '#office' do
    
    context 'is a manager' do
      before { allow(subject).to receive(:manager?).and_return(true) }
      it { is_expected.to validate_presence_of(:office) }
    end
    
    context 'is not a manager' do
      before { allow(subject).to receive(:manager?).and_return(false) }
      it { is_expected.not_to validate_presence_of(:office) }
    end
    
  end
end

Profile picture of Daniel Straßner
Daniel Straßner
Last edit
Daniel Straßner
License
Source code in this card is licensed under the MIT License.
Posted by Daniel Straßner to makandra dev (2017-06-26 09:54)