gpt4 book ai didi

ruby-on-rails - 除非另一个字段是真实的,否则如何测试验证存在?

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:45 35 4
gpt4 key购买 nike

给定这段代码:

field :start_now, type: Boolean, :default => true
field :time_zone
validates :time_zone, inclusion: {
in: ActiveSupport::TimeZone.zones_map.keys
}, unless: :start_now?

我已经创建了这个 rspec 测试,但它很长而且不干。而像这样的唯一原因是因为“除非”条件:

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

有没有更短的方法来做到这一点?

最佳答案

真的没有必要让它比这更短。这两个测试都准确地描述了他们正在测试的内容,并且它们对这些测试非常具体

根据我在测试中看到的情况,您希望您的测试是 DAMP .这并不意味着它们不干燥,但它确实意味着您不应该向后弯曲以使其尽可能小和窄。

您的代码有两个不同且互斥的状态,这取决于 bool 值 start_now?。你必须测试这两种状态,而且真的没有办法解决这个问题。也没有重复;您正在测试两个不同的分支。

虽然你的上下文could use a wee bit of a verbiage clean up ,他们非常擅长描述您需要做什么。

关于ruby-on-rails - 除非另一个字段是真实的,否则如何测试验证存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310474/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com