Заглушка / имитация глобальных констант в RSpec

У меня есть гем, у которого есть метод, который действует по-разному в зависимости от Rails.env:

def self.env
  if defined?(Rails)
    Rails.env
  elsif ...

А теперь я хотел бы написать спецификацию, которая проверяет этот путь кода. Сейчас я делаю это так:

Kernel.const_set(:Rails, nil)
Rails.should_receive(:env).and_return('production')
...

И это нормально, просто некрасиво. Другой способ - объявить это в spec_helper :

module Rails; end

, и он тоже работает. Но может есть способ получше? В идеале это должно работать:

rails = double('Rails')
rails.should_receive(:env).and_return('production')

Но это не так. А может я что-то не так делаю?

5
задан Paweł Gościcki 21 October 2011 в 10:14
поделиться