【发布时间】:2021-05-11 14:11:32
【问题描述】:
在我的 Rails6 应用程序中,我有两个模型验证,我想通过 Minitest 进行测试:
class Portfolio < ApplicationRecord
validates :name, :status, presence: true
validates :initial_return do |record, attr, value|
record.errors.add(attr, 'Add value between -100 and 100') unless value >= -100 && value <= 100
end
end
迷你测试:
class PortfolioTest < ActiveSupport::TestCase
setup do
@portfolio = Portfolio.create(name: Faker::Bank.name)
end
test 'invalid PortfolioSpotlightFigure, does not fit the range (-100, 100)' do
@portfolio.initial_return = -101
assert_not @portfolio.valid?
@portfolio.initial_return = 101
assert_not @portfolio.valid?
@portfolio.initial_return = 50
assert @portfolio.valid?
end
context 'validations' do
should validate_presence_of(:name)
end
end
Minitest 对这两种情况都给出了相同的错误:
ArgumentError:您需要提供至少一个验证
但是当我从Portfolio 模型中删除:initial_return 字段的验证时:
validates :initial_return do |record, attr, value|
record.errors.add(attr, 'Add value between -100 and 100') unless value >= -100 && value <= 100
validate_presence_of(:name) 的测试将通过,这意味着我错误地定义了该验证。我错过了什么?
【问题讨论】:
-
为什么不干...
validates :initial_return, presence: true, inclusion: -100..100 -
@dbugger 错误消息是“初始返回不包含在列表中”,这对用户不是很友好。
validate_numericality_of提供了更多有用的错误消息。
标签: ruby-on-rails ruby minitest shoulda