我有以下類: 我想確保類url只爲所有實例設置一次。如何清除ruby中的rspec測試之間的類變量
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類變量仍然是從第二試運行時,第一個測試設置。 即使我有第一次測試結束時的無實例垃圾回收在第二次測試運行之前還沒有清除內存:
任何想法都會很棒! 我的確聽說你可能會使用Class.new,但我不知道如何去做這件事。
不完全與您的問題相關,但:*從不*在Ruby中使用@@類變量。改用@class實例變量。他們的表現更可預測。 –