ruby-on-rails – 如何在rails中测试rspec shoulda进行自定义验证?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在rails中测试rspec shoulda进行自定义验证?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的模型中有一个私有方法,如下所示:
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

这种方法更像是一种唯一性范围,可以防止重复记录.我想知道如何使用shoulda或rspec编写验证测试:record_uniq?

我试过的例子:

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

解决方法

简单 – 构建一个未通过验证的对象,验证它,并验证是否已设置正确的错误消息.

例如(如果您有一个名为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

猜你在找的Ruby相关文章