Сброс одиночного экземпляра в Ruby

Как мне сбросить одноэлементный объект в Ruby? Я знаю, что один никогда не хотел бы делать это вreal код, но как насчет модульных тестов?

Вот что я пытаюсь сделать в тесте RSpec:

describe MySingleton, "#not_initialised" do
  it "raises an exception" do
    expect {MySingleton.get_something}.to raise_error(RuntimeError)
  end
end

Это терпит неудачу, потому что один из моих предыдущих тестов инициализирует объект singleton. Я пытался следовать совету Яна Уайта отэтот ссылка, которая по сути обезьяна исправляет синглтон, чтобы обеспечить метод reset_instance, но я получаю неопределенный метод "reset_instance" исключение.

require 'singleton'

class <<Singleton
  def included_with_reset(klass)
    included_without_reset(klass)
    class <<klass
      def reset_instance
        Singleton.send :__init__, self
        self
      end
    end
  end
  alias_method :included_without_reset, :included
  alias_method :included, :included_with_reset
end

describe MySingleton, "#not_initialised" do
  it "raises an exception" do
    MySingleton.reset_instance
    expect {MySingleton.get_something}.to raise_error(RuntimeError)
  end
end

Какой самый идиоматичный способ сделать это в Ruby?

Ответы на вопрос(3)

Ваш ответ на вопрос