私は次のクラスを持っています: クラスURLがすべてのインスタンスに対して一度だけ設定されていることを確認します。ルビーのrspecテスト間でクラス変数をクリアするには
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 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
は、私は2つのテストを持っています。 最初のテストの終わりにnilにインスタンスを持っていても、2回目のテストが実行される前にガベージコレクションがメモリをクリアしていません:
アイデアは素晴らしいでしょう! Class.newを使用する可能性があると聞いてきましたが、これについてどうやって行くのか分かりません。ここで
ない正確にあなたの問題に関連していますが、Rubyでは@@クラス変数を使用しません。代わりに@classインスタンス変数を使用してください。彼らは予想よりもはるかに行動します。 ** NameError:オブジェクトで初期化されていないクラス変数@@ URL ** 私が使用して動作するようにそれを得た: 'の前に(各) DataFactory.class_eval {class_variable_setを行い、私はこれを実行したとき –