【发布时间】:2014-08-16 08:37:54
【问题描述】:
所以我正在编写需要退款的代码。我写了一个退款验证器来检查以确保退款不超过原始费用。然而,在我的规格中,我意识到相关的费用还没有出现。使用因子女孩。我怎样才能做出这样的事情?
验证器
class RefundValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value <= record.charge.amount
record.errors[:attribute] << "is greater than original charge"
end
end
end
验证
validates :amount, refund: true
工厂
FactoryGirl.define do
factory :refund do
association :client
association :charge
amount 99
end
end
规格
context 'validations' do
%i(client_id therapist_id appointment_id booking_id value).each do |attr|
it { is_expected.to validate_presence_of attr }
end
it { is_expected.to validate_numericality_of(:value).is_greater_than_or_equal_to(0).is_less_than_or_equal_to(5) }
end
错误(我在存在规范中得到了所有 4 个属性,而不仅仅是 client_id):
1) Refund validations should require client_id to be set
Failure/Error: it { is_expected.to validate_presence_of attr }
NoMethodError:
undefined method `amount' for nil:NilClass
# ./app/validators/refund_validator.rb:3:in `validate_each'
# ./spec/models/refund_spec.rb:20:in `block (4 levels) in <top (required)>'
我已尝试使用明确指定的充电工厂来明确创建工厂模型,但无济于事。不知道发生了什么事。任何帮助将不胜感激。
【问题讨论】:
标签: ruby-on-rails ruby rspec tdd