Rails:less_than验证使RSpec测试失败

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

使用中:

  • Ruby 2.6.6
  • Rails 6.0.2.2

我有一个模型Part,其中有2个字段,quantity_availableminimum_order

我进行了以下验证以确保:

  • [minimum_orderquantity_available必须存在
  • [minimum_orderquantity_available不能为0或负数
  • minimum_order不能大于quantity_available
class Part < ApplicationRecord
  validates :quantity_available, :minimum_order, presence: true
  validates_numericality_of :quantity_available, :minimum_order, only_integer: true, greater_than: 0
  validates_numericality_of :minimum_order, only_integer: true, less_than: :quantity_available
end

[当我使用rails console手动测试以创建与上述验证冲突的新零件时,验证工作正常,但是我的RSpec测试之一失败了>>

# RSpec
RSpec.describe Part, type: :model do
  let(:part) { Part.new(quantity_available: 250, minimum_order: 10)} 

  it 'is not valid without a Quantity Available' do
    part.quantity_available = nil
    expect(part).to_not be_valid
  end
end
# Console Error
Failures:

  1) Part basic checks is not valid without a Quantity Available
     Failure/Error: expect(part).to_not be_valid

     TypeError:
       cant convert nil into Float
     # ./spec/models/part_spec.rb:32:in `block (3 levels) in <top (required)>'

正如您所看到的,这是一个非常简单的测试,仅声明没有quantity_available的零件应该失败,但是在这种情况下,它在技术上确实会失败,只是不以我希望它失败的方式出现。

[我的最佳猜测是,它可能与在测试中将quantity_available声明为nil有关,因为它无法验证所有3个条件,从而导致某处导线交叉。我对minimum_order进行的测试与上述测试相同,但测试通过了预期的结果。

我在这里做错了什么?

使用:Ruby 2.6.6 Rails 6.0.2.2,我有一个Model,Part,其中有2个字段,quantity_available和minimum_order。我通过以下验证来确保:minimum_order和...

ruby-on-rails ruby unit-testing validation rspec
1个回答
0
投票

我猜该符号未真正评估为字段值,请尝试像这样传递lambda:

© www.soinside.com 2019 - 2024. All rights reserved.