我在寻找测试模型中属性范围的最优雅方法时遇到了一些麻烦。我的模型看起来像:
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) }