Tôi có lớp sau: Tôi muốn đảm bảo url lớp chỉ được đặt một lần cho tất cả các phiên bản.Làm cách nào để xóa biến lớp giữa các thử nghiệm rspec trong 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
Tôi có hai bài kiểm tra:
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
Vấn đề là thử nghiệm thứ hai không bao giờ ném một ngoại lệ là @@ biến lớp url vẫn thiết lập từ các thử nghiệm đầu tiên khi chạy thử nghiệm thứ hai. Mặc dù tôi đã nhận được cá thể không đến lúc kết thúc bộ sưu tập rác thử nghiệm đầu tiên chưa xóa bộ nhớ trước khi thử nghiệm thứ hai chạy:
Bất kỳ ý tưởng nào cũng tuyệt vời! Tôi đã nghe bạn có thể có thể sử dụng Class.new nhưng tôi không chắc chắn làm thế nào để đi về điều này.
Không chính xác liên quan đến vấn đề của bạn, nhưng: * không bao giờ * sử dụng biến @@ class trong Ruby. Sử dụng các biến mẫu @class thay thế. Họ cư xử nhiều hơn dự đoán. –