Wie kommt man Geschichten mit erholsamer Authentifizierung und Gurke zu arbeiten?
-
22-08-2019 - |
Frage
Nach den neuesten stabilen Versionen von Klonen
- Schienen (2.3.2),
- rspec (1.2.2)
- Gurke (0.2.0.4 ... herauskam 2009-03-24),
- rspec-Schienen (1.2.2)
- restful-authentication (Fest formatted_user_path und ein paar andere Probleme),
- webrat ,
- rubyist-AASM (und einige andere)
in eine saubere Schiene Anwendung und nach (was ich glaube) ist alle Anweisungen für jedes Plugin, Gurken Geschichten noch scheitern :-( Hier ist eine Zusammenfassung der Probleme:.
- Umleitungen funktionieren nicht auf Anhieb trotz der geschaffen zu haben ‚map.root: controller =>‚my_controller‘‘ Route:
expected redirect to "/", got no redirect (Spec::Expectations::ExpectationNotMetError) /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations.rb:57:in `fail_with' /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/handler.rb:14:in `handle_matcher' /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb:31:in `should'. /features/step_definitions/user_steps.rb:111:in `/^an? (.*) user named '(.*)'$/' features/sessions.feature:25:in `And an activated user named 'reggie''
- sagt die Geschichte der
logged_in?
Methode trotz derfeatures/step_definitions/ra_env.rb
Datei calling geschützt ist:ApplicationController.send(:public, :logged\_in?, :current\_user, :authorized?)
Nicht, dass Anruf dieser Methoden zur Verfügung stellen, ohne Anstoßen?
Oh, und ich versuche, Autospec zu laufen, also habe ich die folgenden Befehle zu erledigen fing es an:
export AUTOFEATURE=true rake spec:server:start ruby script/autospec
Lösung
Ich habe einige der Forschung getan und hier ist das, was ich habe.
Die ra_response_steps.rb
erwarten umleiten Rohöl zu kommen und dann die Geschichte zu definieren, ob die Umleitung soll oder nicht gefolgt werden.
Dies schlägt fehl, weil webrat Session Implementierung den folgenden Code hat:
def request_page(url, http_method, data) #:nodoc: h = headers h['HTTP_REFERER'] = @current_url if @current_url debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}" if h.empty? send "#{http_method}", url, data || {} else send "#{http_method}", url, data || {}, h end save_and_open_page if exception_caught? && Webrat.configuration.open_error_files? raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code? reset @current_url = url @http_method = http_method @data = data if internal_redirect? check_for_infinite_redirects request_page(response_location, :get, {}) end return response end
die if internal_redirect? ... end
Hinweis. Dies, wenn die eine unserer Tests machen scheitern, weil webrat ist die Umleitungen folgen.
Als Abhilfe können Sie diese Zeilen auf Ihrer webrat Sitzung kommentieren, aber das ist wahrscheinlich nicht eine anständige Lösung. Ich werde ein bisschen mehr arbeiten und einen Patch irgendwo veröffentlichen.
Andere Tipps
Ich fand diese Blog-Post, die den Kern des Problems erklärt auch:
http: //blog.andrew .premdas.org / articles / 2008/10/15 / webrat-Besuche-and-Umleitungen
im Grunde, erholsame Authentifizierungstests versuchen, etwas zu testen, die nicht mit webrat getestet werden soll. So empfahl die Änderung oben ist das Gegenteil von dem, was ich denke wahrscheinlich geändert werden soll.
Ich habe die Erholsamer Authentication Tests geändert, so dass sie Umleitungen nicht testen, aber nur testen, welche Seite Sie am Ende. Allerdings scheint es immer noch ein Problem mit bestimmten Umleitungen zu sein, die ich nicht verstehe:
Then she should be at the new session page # features/step_definitions/ra_response_steps.rb:15
expected "session/new", got redirected to "http://www.example.com/session/new" (Spec::Expectations::ExpectationNotMetError)
Ich verstehe nicht, wo diese example.com herkommt. sonst jemand einen ähnlichen Fehler hat?
Ich hatte die Definition der Logout-Funktion in user_steps.rb zu ändern:
def log_out
get '/ Logout'
Ende
Bevor es versucht zu bekommen ‚/ session / zerstören‘, das gibt es nur, wenn Sie die Standardrouten nicht entfernen.
Also, stellen Sie sicher, dass Sie "sind AuthenticatedSystem" in application_controller.
Immer noch durch einige der anderen Probleme zu kämpfen, obwohl ...
Wie für die „Geschützte Methode“ Problem, habe ich herausgefunden, dass, wenn ich nicht verwenden Autospec und lassen config.cache_classes = true, dann werden die Tests bestanden.
Drehen config.cache_classes = false führt den Fehler erneut.
Es scheint, dass das das Problem ist, entweder mit wie Klasse-Caching in Schienen implementiert ist, oder wie rspec verwaltet Klassen, die erstellt wurden. Leider habe ich nicht die Ressourcen, dies ein ganzes Protokoll mehr zu untersuchen, und es scheint, gibt es eine gute Diskussion darüber stattfindet, an: http://groups.google. com / Gruppe / rspec / browse_thread / thread / 500ede090bd08996 / 25a3d9a7d283696b? lnk = gst & q = cache_classes # 25a3d9a7d283696b
Ich habe nicht viel Anleitung zu bieten haben, nur Sympathie - Ich habe ein paar Stunden damit verbracht, vor kurzem mit dem gleichen Problem zu tun. Auf der Seite oben, dann ist es, wie ich gelernt RSpec.
Eine Sache, die ich gefunden habe, ist, dass viele der Ausfälle waren Dinge, die ich wollte sowieso ändern -. B. Ich wollte nicht ‚/‘ auf Login umleiten, aber woanders
Am Ende meisten Fehler waren einfach zu beheben, wenn ich dachte, war, wo zu suchen.
Ich arbeite durch die gleichen Fragen. Ich bin noch nicht da, aber ich denke, dass ApplicationController.send (: public,: logged_in ?,: current_user,: autorisiert). Unterstützung gehen muss / env.rb statt
ich einige der genannten Fehler auch. Aber das erste Problem in meiner Anwendung auftritt, ist dies:
Mehrere Schritt Definitionen haben die gleiche Regexp:
Funktionen / step_definitions / user_steps.rb: 16: in /^(.*) (.*) user named '(.*)'$/'
features/step_definitions/user_steps.rb:29:in
/ ^ gibt es keinen Benutzer mit dem Namen ‚((. *).
*) '$ /'
(Gurke :: Redundant)
Sicher, ich kann dieses Problem zu beheben, aber viele weitere Fehler folgen (einschließlich der geschützten logged_in? Methode auf dem Controller, die andernfalls RSpecs und so weiter).
Weiß jemand, ob wir alle hier Somthing grundsätzlich falsch machen? Oder ist es nur, dass restful_authentication in seiner aktuellen Version gebrochen?