我在查找最優雅的方式來測試模型中屬性的範圍時遇到了一些麻煩。我的模型看起來像:rspec測試模型的最小值和最大值
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) }
您的測試不是您的範圍?它不應該是這樣的:它{應該ensure_inclusion_of(:小時).in_range(1..23)} – juicedM3