gpt4 book ai didi

ruby-on-rails - 最小值和最大值的 rspec 测试模型

转载 作者:行者123 更新时间:2023-12-02 05:29:52 26 4
gpt4 key购买 nike

我在寻找最优雅的方法来测试我的模型中的属性范围时遇到了一些麻烦。我的模型看起来像:

class Entry < ActiveRecord::Base
attr_accessible :hours

validates :hours, presence: true,
:numericality => { :greater_than => 0, :less_than => 24 }
end

我的 rspec 测试看起来像:

require 'spec_helper'
describe Entry do
let(:entry) { FactoryGirl.create(:entry) }

subject { entry }

it { should respond_to(:hours) }
it { should validate_presence_of(:hours) }
it { should validate_numericality_of(:hours) }


it { should_not allow_value(-0.01).for(:hours) }
it { should_not allow_value(0).for(:hours) }
it { should_not allow_value(24).for(:hours) }
# is there a better way to test this range?


end

这个测试有效,但是有没有更好的方法来测试最小值和最大值?我的方式似乎笨拙。测试值的长度似乎很容易,但我没有看到如何测试数字的值。我试过这样的事情:

it { should ensure_inclusion_of(:hours).in_range(0..24) }

但这是预期的包含错误,我无法让我的测试通过。也许我没有正确配置它?


我最终按照下面的建议在我的两个边界上、上面和下面进行了测试。因为我不限制为整数,所以我测试到小数点后两位。我认为对于我的应用而言,这可能“足够好”。

it { should_not allow_value(-0.01).for(:hours) }
it { should_not allow_value(0).for(:hours) }
it { should allow_value(0.01).for(:hours) }
it { should allow_value(23.99).for(:hours) }
it { should_not allow_value(24).for(:hours) }
it { should_not allow_value(24.01).for(:hours) }

最佳答案

您正在寻找的应该匹配器是 is_greater_than 和 is_less_than 匹配器。它们可以链接到 validate_numericality_of 匹配器,如下所示

it {should validate_numericality_of(:hours).is_greater_than(0).is_less_than(24)}

这将验证您范围内的数字是否生成有效变量,以及为超出该范围的数字返回的错误是否正确。 ensures_inclusion_of 匹配器不起作用是正确的,因为它预期会出现不同类型的错误,但此验证应该可以正常工作。

关于ruby-on-rails - 最小值和最大值的 rspec 测试模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537207/

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