У меня есть следующий класс: Я хочу убедиться, что класс 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, но я не знаю, как это сделать.