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
を変更しても
。
#furthest
はnil
を返さないようにするためFactory.create
呼び出しが必要とされるかのように第二のスペック、it { should == 100 }
は、元のComic.maximum(:comic_id) || 0
定義に渡します。
私は間違っていますか?
Comic.maximum(:comic_id)が指定されていない限り、最も深い定義を試しましたか? – corroded
それはすべて私に論理的に見えます。 'subject'の値を出力すると、それはあなたが期待するものでしょうか?そして迅速なサニティチェックのために、この例を 'Comic.furthest.should == 0'に変更すると、それは違いがありますか? – d11wtq
私は、Comic.maximum(:comic_id) 'が動作を変更することなく' 0を試しました。 – cfeduke