how to test rspec shoulda for custom validation in rails?

rspec, rspec-rails, ruby-on-rails, ruby-on-rails-3, shoulda

Solution

Simple - build an object that fails the validation, validate it, and verify that the correct error message has been set.

For example (if you had a model named City):

it 'validates that city is unique' do
  city = City.new # add in stuff to make sure it will trip your validation
  city.valid?
  city.should have(1).error_on(:base) # or 
  city.errors(:base).should eq ["already exists"]
end

Problem

I have a Private methods in my model like the following: ``` validate :record_uniq private def record_uniq if record_already_exists? errors.add(:base, "already exists") end end def record_already_exists? question_id = measure.question_id self.class.joins(:measure). where(measures: {question_id: ques_id}). where(package_id: pack_id). exists? end ``` This methods is more like a `uniqueness` scope thing to prevent duplicate records. I want to know how to write test for `validate :record_uniq` by using `shoulda` or `rspec`? Example of what i tried: ``` describe Foo do before do @bar = Foo.new(enr_rds_measure_id: 1, enr_rds_package_id: 2) end subject { @bar } it { should validate_uniqueness_of(:record_uniq) } end ```

Original source