错误的布尔结果比较Date对象

时间:2013-01-02 11:38:14

标签: ruby-on-rails ruby rspec

我正在尝试编写比较某些日期的测试。到目前为止,我有2个测试,其中一个按预期工作,但另一个失败,因为没有/没有正确比较日期。 这是我的代码:

def self.has_expired?(card, start_month, start_year, annually)
    card_date = Date.new(card.year, card.month, -1)
    billing_date = Date.new(start_year, start_month, -1)
    if !annually
      p '--------'
      p card_date
      p billing_date
      card_date > billing_date

    else
      #return false
    end
  end

信用卡对象

creditcard = ActiveMerchant::Billing::CreditCard.new(
        :number     => 1234567890123456
        :month      => 01,
        :year       => 13,
        :first_name => 'John', 
        :last_name  => 'Doe',
        :verification_value  => 132,
        :brand => 'visa'
      )

这是p的输出 第一个块按预期工作。

"--------"
Tue, 31 Jan 0013
Thu, 28 Feb 2013
false

第二块失败,期望是真的,但是错了

."--------"
Tue, 31 Jan 0013
Fri, 30 Nov 2012
false

这是我的rspec代码

describe CreditCard do 
  context 'card_expired' do
    it 'should return false with args passed to method (02month, 13 year, annually==false)' do
      CreditCard.has_expired?(creditcard, 02, 2013, false).should == false
    end

    it 'should return true with args passed to method (11month, 12 year, annually==false)' do
      CreditCard.has_expired?(creditcard, 11, 2012, false).should == true
    end
  end

end

在irb中它作为魅力,返回正确的值(真/假)

1 个答案:

答案 0 :(得分:2)

我认为问题在于你的逻辑。当到期日期在结算日期之前时,卡片已过期,因此

card_date < billing_date # expired

而不是

card_date > billing_date # valid

还要尝试完整的2013年,看看它是否会有所帮助

:year => 2013,

此行之后您还缺少逗号(可能是复制/粘贴错误):number => 1234567890123456