Frage

Nach den neuesten stabilen Versionen von Klonen

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:.

  1. 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''
    
  2. sagt die Geschichte der logged_in? Methode trotz der features/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
War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top