У меня есть довольно простой статический метод в модели ActiveRecord:
#./app/models/comic.rb
class Comic < ActiveRecord::Base
class << self
def furthest
Comic.maximum(:comic_id) || 0
end
end
end
При выполнении Comic.furthest
в консоли Rails возвращается 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)>'
Даже если я изменю furthest
на просто:
def furthest
0
end
Я все еще получаю nil (using ==)
.
Вторая спецификация it { should == 100 }
проходит с исходным определением Comic.maximum(:comic_id) || 0
, как если бы для #furthest
не требовалось nil
.
требуется
Factory.create
.
Что я делаю не так?