Ho la seguente classe: Voglio garantire che l'url della classe sia impostato una sola volta per tutte le istanze.Come cancellare le variabili di classe tra i test rspec in 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
ho due prove:
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
Il problema è la seconda prova non genera un'eccezione come variabile @@ classe URL è ancora impostato dal primo test quando il secondo test. Anche se l'istanza è stata annullata alla fine del primo test, la garbage collection non ha cancellato la memoria prima dell'esecuzione del secondo test:
Qualsiasi idea sarebbe ottima! Ho sentito che potresti usare Class.new ma non sono sicuro su come procedere.
esattamente relativo al tuo problema, ma: * mai * usa le variabili di classe @@ in Ruby. Utilizza invece le variabili di istanza @class. Si comportano in modo molto più prevedibile. –