Как очистить переменные класса между тестами rspec в ruby ​​

У меня есть следующий класс: Я хочу убедиться, что класс url устанавливается только один раз для всех экземпляров.

class DataFactory
  @@url = nil

  def initialize()
begin
    if @@url.nil?
       Rails.logger.debug "Setting url"
       @@url = MY_CONFIG["my value"]
    end
rescue Exception
  raise DataFactoryError, "Error!"
end
  end
end

У меня есть два теста:

it "should log a message" do
  APP_CONFIG = {"my value" => "test"}
  Rails.stub(:logger).and_return(logger_mock)
  logger_mock.should_receive(:debug).with "Setting url"

  t = DataFactory.new
  t = nil
end

it "should throw an exception" do
  APP_CONFIG = nil

  expect {
    DataFactory.new
  }.to raise_error(DataFactoryError, /Error!/)
end

Проблема в том, что второй тест никогда не генерирует исключение, поскольку переменная класса @@ url по-прежнему устанавливается из первого теста при запуске второго теста. Хотя я установил для экземпляра значение nil в конце первого теста, сборка мусора не очистила память перед запуском второго теста:

Любые идеи будут отличными! Я сделал слышал, вы могли бы использовать Class.new, но я не знаю, как это сделать.

21
задан Jonathan Leffler 24 October 2013 в 01:11
поделиться