Ich habe eine Sinatra-App, die Seiten als schreibgeschützt oder editierbar anbietet, abhängig davon, ob der Benutzer angemeldet ist.
Der Controller legt eine Variable @can_edit
fest, die von den Ansichten verwendet wird, um Bearbeitungslinks zu verbergen / anzuzeigen. Wie kann ich den Wert von @can_edit
in meinen Tests testen? Ich habe keine Ahnung, wie ich unter Rack :: Test zur aktuellen Instanz des Controllers komme.
Ich benutze class_eval
, um die Methode logged_in?
im Controller auszugeben, aber ich muss auf last_response.body
für meine Bearbeitungslinks zurückgreifen, um zu sehen, ob @can_edit
gesetzt wurde oder nicht.
Wie kann ich den Wert von @can_edit
direkt testen?
Leider glaube ich nicht, dass dies ohne Änderung von Rack :: Test möglich ist. Wenn Sie während des Anwendungstests eine Anforderung eingeben, führt Rack :: Test Folgendes aus:
call
Es ist einfach, auf last_request
und last_response
zuzugreifen, aber leider werden keine Informationen über den Status Ihrer Anwendung gespeichert, während sie ausgeführt wird.
Wenn Sie daran interessiert sind, einen Rack :: Test-Patch zu hacken, sehen Sie sich zunächst rack-test/lib/rack/mock_session.rb
in Zeile 30 an. Hier führt Rack :: Test Ihre Anwendung aus und erhält die standardmäßigen Rack-App-Rückgabewerte (Status, Header, Körper). Meine Vermutung ist, dass Sie auch Ihre Anwendung modifizieren müssen, um alle ihre Instanzvariablen zu sammeln und zugänglich zu machen.
In jedem Fall ist es am besten, nach Ergebnissen zu suchen, nicht nach Implementierungsdetails. Wenn Sie sicherstellen möchten, dass ein Bearbeitungslink nicht sichtbar ist, testen Sie, ob der Bearbeitungslink über die DOM-ID vorhanden ist:
%Vor%Es ist möglich mit einem kleinen Hack. Die Instanzen der Sinatra-App sind nicht verfügbar, da sie beim Aufruf von Sinatra :: Base # erstellt werden. wie Alex erklärte. Dieser Hack bereitet eine Instanz auf ahead vor und lässt sie beim nächsten Aufruf greifen.
%Vor%Ich habe diese Technik herausgefunden, die Instanz vorzutäuschen, die den aktuellen Test ausführt .
Hier ist eine fiese aber lebensfähige Alternative
%Vor%Dies ermöglicht es Ihnen, vor dem Filtern und / oder dem Zugriff auf Instanzvariablen, die für die Basisanwendung erstellt wurden, mit einem Sinatra zu testen.