我有以下类:
我想确保类url只为所有实例设置一次.
我想确保类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类变量仍然从第一个测试中设置.
即使我在第一次测试结束时将实例设为零,垃圾回收未在第二次测试运行之前清除内存:
任何想法都会很棒!
我听说你可以使用Class.new,但我不知道该怎么做.
解决方法
describe DataFactory before(:each) { DataFactory.class_variable_set :@@url,nil } ... end