Tengo la siguiente clase: Quiero asegurarme de que la url de clase solo se establezca una vez para todas las instancias.¿Cómo puedo borrar las variables de clase entre las pruebas rspec en ruby?
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
tengo dos pruebas:
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
El problema es la segunda prueba nunca se produce una excepción como la variable @@ clase URL aún se establece a partir de la primera prueba cuando el segundo pruebas de funcionamiento. Aunque tengo la instancia de nulo al final de la primera prueba, la recolección de basura no ha borrado la memoria antes de que se ejecute la segunda prueba:
¡Cualquier idea sería genial! Escuché que posiblemente podría utilizar Class.new, pero no estoy seguro de cómo hacerlo.
relacionado con su problema, pero: * nunca * use las variables @@ class en Ruby. Use las variables de instancia de @class en su lugar. Se comportan mucho más predeciblemente. –