使用中:
我有一个模型Part
,其中有2个字段,quantity_available
和minimum_order
。
我进行了以下验证以确保:
minimum_order
和quantity_available
必须存在minimum_order
和quantity_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和...
我猜该符号未真正评估为字段值,请尝试像这样传递lambda: