いくつかの日付を比較するテストを書こうとしています。これまでのところ、2つのテストがあり、そのうちの1つは意図したとおりに機能しますが、日付を正しく比較しない/正しく比較しないため、もう1つは失敗します。これが私のコードです:
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
2番目のブロックは失敗し、trueを期待しますが、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では、チャームとして機能し、正しい値(true / false)を返します。