【发布时间】:2025-12-04 15:55:01
【问题描述】:
鉴于此代码:
field :start_now, type: Boolean, :default => true
field :time_zone
validates :time_zone, inclusion: {
in: ActiveSupport::TimeZone.zones_map.keys
}, unless: :start_now?
我已经创建了这个 rspec 测试,但它很长而且不是 DRY。而这样的唯一原因是因为“除非”条件:
describe "#time_zone" do
context "scheduled" do
before :each do
subject.start_now = false
end
it { is_expected.to validate_inclusion_of(:time_zone).in_array(ActiveSupport::TimeZone.zones_map.keys) }
end
context "run now" do
before :each do
subject.start_now = true
end
it { is_expected.not_to validate_inclusion_of(:time_zone).in_array(ActiveSupport::TimeZone.zones_map.keys) }
end
end
有没有更短的方法可以做到这一点?
【问题讨论】:
标签: ruby-on-rails ruby validation rspec dry