最小的唯一性测试

问题描述 投票:0回答:3

我在Ruby on Rails上使用minitest。以下是我的模特。

require 'mongoid'
class Person
  include Mongoid::Document
  index({ pin: 1 }, { unique: true, name: "pin_index" })
  field :first_name
  field :last_name
  field :pin

  validates :pin,                presence: true, uniqueness: true
  validates :first_name,         presence: true
  validates :last_name,          presence: true
end

我尝试编写模型测试。我想编写一个控制引脚字段是否唯一的测试。我怎样才能做到这一点?任何的想法?

我尝试编写如下测试:

it 'must not be valid' do
  person_copy = person.dup
  person.save
  person_copy.save
end
ruby-on-rails ruby model minitest
3个回答
0
投票

您可以像这样编写测试:

it 'must have unique pin' do
  person_copy = person.dup
  proc { person_copy.save! }.must_raise(Mongoid::Errors::Validations)
  person_copy.errors.must_include(:pin)
end

0
投票

您可以使用assert_includesassert_same来测试错误是正确的(关于唯一性):

it 'must not be valid' do
  person_copy = person.dup
  person.save
  person_copy.save
  assert_includes person.errors, :pin
  assert_same person.errors[:pin], "pin is not unique (replace with actual error message)"
end

0
投票

考虑到你已经设置了一个灯具,你可以这样做:

test 'pin must be unique' do
  new_person = Person.new(@person.attributes)
  refute new_person.valid?
end
© www.soinside.com 2019 - 2024. All rights reserved.