Reiniciando una instancia de singleton en Ruby
¿Cómo reinicio un objeto singleton en Ruby? Sé que uno nunca querría hacer esto enreal código pero ¿qué pasa con las pruebas unitarias?
Esto es lo que estoy tratando de hacer en una prueba de RSpec:
describe MySingleton, "#not_initialised" do
it "raises an exception" do
expect {MySingleton.get_something}.to raise_error(RuntimeError)
end
end
Falla porque una de mis pruebas anteriores inicializa el objeto singleton. He intentado seguir el consejo de Ian White deesta enlace que esencialmente mono parches Singleton para proporcionar un método reset_instance pero obtengo una excepción de método indefinido '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
¿Cuál es la forma más idiomática de hacer esto en Ruby?