0

我在 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

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

我尝试编写如下测试:

it 'must not be valid' do
  person_copy = person.dup
  person.save
  person_copy.save
end
4

3 回答 3

0

您可以使用assert_includesandassert_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
于 2013-04-12T14:07:12.560 回答
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
于 2013-04-12T14:04:33.600 回答
0

考虑到您已经设置了夹具,您可以这样做:

test 'pin must be unique' do
  new_person = Person.new(@person.attributes)
  refute new_person.valid?
end
于 2017-12-19T15:20:59.580 回答