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