RSpec 2 определяет статический метод ActiveRecord - PullRequest
1 голос
/ 02 июля 2011

У меня есть довольно простой статический метод в модели 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.

Что я делаю не так?

1 Ответ

0 голосов
/ 20 июля 2011

Я вполне уверен, что это проблема со мной, использующим выпуск Ruby 1.9.2 для p180 с пользовательскими патчами для улучшения производительности.После обновления до p290 эта проблема исчезла.

...