Zurücksetzen einer Singleton-Instanz in Ruby

Wie setze ich ein Singleton-Objekt in Ruby zurück? Ich weiß, dass man das niemals machen möchteecht Code, aber was ist mit Unit-Tests?

Folgendes versuche ich in einem RSpec-Test zu tun:

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

Es schlägt fehl, weil einer meiner vorherigen Tests das Singleton-Objekt initialisiert. Ich habe versucht, den Rat von Ian White zu befolgendiese Link, der Singleton im Wesentlichen mit Affen patcht, um eine reset_instance-Methode bereitzustellen, aber ich erhalte eine undefinierte 'reset_instance'-Ausnahme für die Methode.

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

Was ist der idiomatischste Weg, dies in Ruby zu tun?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage