Синглтон-классы по сути делают это
def self.instance
@instance ||= new
end
private_class_method :new
Таким образом, вы можете вообще обойтись без напоминания, вызвав приватный метод new с помощью send
let(:instance) { GlobalClass.send(:new) }
Хорошим преимуществом этого способа является то, что ни одно глобальное состояние не изменяется в результате выполнения ваших тестов.
Наверное, лучше, из этот ответ :
let(:instance) { Class.new(GlobalClass).instance }
Это создает анонимный класс, который наследует от GlobalClass
, в котором хранятся все переменные экземпляра уровня класса. Затем он выбрасывается после каждого теста, оставляя GlobalClass
нетронутым.