rspec验证,除非

时间:2013-04-04 18:42:58

标签: ruby-on-rails shoulda specifications

brief.rb

# encoding: utf-8
class Brief < ActiveRecord::Base
  belongs_to :project  
  validates_numericality_of :duration, :only_integer => true, :less_than_or_equal_to => 15, :greater_than_or_equal_to => 5, :unless => Proc.new{ |b| b.project.project_type.express_project }
end

brief_spec.rb

require 'spec_helper'

describe Brief do

  before(:all) do
    @project =Factory(:project)
    @brief=Factory.build(:brief,:project => @project)
  end

  context 'non-specific tests' do

    subject { @brief }

    it { should belong_to(:project) }

    it { should validate_presence_of(:project}

  end
end

这些是我的简短模型和简短的spec文件。但是我没弄清楚如何测试validates_numericality_of 除非部分。可以之前有人尝试过吗?

1 个答案:

答案 0 :(得分:1)

使用上下文并测试不同的条件

e.g。

context "when duration is more than 5 but less than 15" do 
  before do 
    subject.duration = 10
  end
  it { should validate_presence_of(:project) }
end
context "when duration is more than 15" do 
  before do 
    subject.duration = 20
  end
  it { should_not validate_presence_of(:project) }
end