2011-07-02 8 views
1

speccing:RSpecの2静的ActiveRecordの方法私はActiveRecordのモデルにかなり基本的な静的メソッドを持っている

#./app/models/comic.rb 
class Comic < ActiveRecord::Base 
    class << self 
    def furthest 
     Comic.maximum(:comic_id) || 0 
    end 
    end 
end 

のRailsでComic.furthestを実行し、私は期待通りに0を返すコンソールを。問題は、私は、レコードの有無の両方のために、この動作を仕様にしようとしています:

#./spec/app/models/comic_spec.rb 
require 'spec_helper' 

describe Comic do 
    describe "#furthest" do 
    subject { Comic.furthest } 

    context "when there are no rows in the database" do 
     it { should == 0 } 
    end 

    context "when there are rows in the database" do 
     before do 
     Factory.create(:comic, :comic_id => 100) 
     Factory.create(:comic, :comic_id => 99) 
     end 

     it { should == 100 } 
    end 
    end 
end 

このすべてが、しかし、私のスペックは、メッセージで失敗している、非常に基本的でわかりやすい表示されます:

1) Comic#furthest when there are no rows in the database 
Failure/Error: it { should == 0 } 
    expected: 0 
     got: nil (using ==) 
# ./spec/models/comic_spec.rb:8:in `block (4 levels) in <top (required)>' 

def furthest 
    0 
end 

私はまだnil (using ==)を得る:私は単純にfurthestを変更しても

#furthestnilを返さないようにするためFactory.create呼び出しが必要とされるかのように第二のスペック、it { should == 100 }は、元のComic.maximum(:comic_id) || 0定義に渡します。

私は間違っていますか?

+0

Comic.maximum(:comic_id)が指定されていない限り、最も深い定義を試しましたか? – corroded

+0

それはすべて私に論理的に見えます。 'subject'の値を出力すると、それはあなたが期待するものでしょうか?そして迅速なサニティチェックのために、この例を 'Comic.furthest.should == 0'に変更すると、それは違いがありますか? – d11wtq

+0

私は、Comic.maximum(:comic_id) 'が動作を変更することなく' 0を試しました。 – cfeduke

答えて

0

これは、Ruby 1.9.2のp180リリースでカスタムパッチを使用して、パフォーマンスを向上させるための問題であると確信しています。 p290にアップグレードした後、この問題は解消されました。

関連する問題