Ich habe ein BaseController
dass ich andere Controller mit überklassifizieren möchte. Ich habe auch einige Controller mit dem Standard überlegen ApplicationController
.
Zum Beispiel kann ich haben:
class AController < ApplicationController
end
ebenso gut wie...
class BController < BaseController
end
Beim Testen muss ich manchmal eine beliebige "Mock" - oder "Fake" -Klasse erstellen, um before_filters, module include usw. zu testen.
Ich habe eine in meinen Spezifikationen so erstellt:
class FakeController < ApplicationController
end
Das ist gut.
Aber jetzt muss ich noch eine davon erstellen FakeController
Klassen, aber diesmal als eine Unterklasse meiner BaseController
Klasse.
Leider die FakeController
Konstante ist bereits registriert und ich bekomme Fehler in der Klasse "Mismatch".
Ich möchte sowas nicht machen FakeController2
- Ich denke, das öffnet eine schlechte Dose Würmer.
Irgendwelche Vorschläge?
Antworten:
0 für die Antwort № 1Ich sehe das Problem nicht mit FakeController2
oder einen anderen Namen, aber die einzige öffentliche Alternative, die mir einfällt, ist die Einführung eines Moduls, damit Ihr zweiter FakeController
existiert in einem anderen Namensraum wie in:
module Foo
class FakeController < ApplicationController
end
end
Es gibt eine private Methode remove_const
definiert am Kernel
die verwendet werden kann, um eine Konstante eines Objekts aufzuheben. Also wenn FakeController
ist definiert am Object
, können Sie die Registrierung mit dem Anruf aufheben:
Object.send(:remove_const, :FakeController)
An dieser Stelle können Sie die Konstante erneut definieren, als würden Sie sie noch nie definiert haben. (Denken Sie daran: Ruby ist eine interpretierte Sprache.)
0 für die Antwort № 2
Eine Alternative zur Unterklassifizierung Ihrer Controller ist die Verwendung der anonymer Controller-Mechanismus bereitgestellt durch die rspec-schienen gem.