Domanda

Dopo aver clonato le ultime versioni stabili di

in un'applicazione rotaie pulito, e dopo (quello che credo siano) tutte le istruzioni per ogni plugin, storie di cetriolo ancora stanno fallendo :-( Ecco una sintesi dei problemi:.

  1. redirect non funzionano destra fuori del blocco, nonostante aver creato il 'map.root: Controller => 'mio_controllore'' itinerario:
    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. la storia dice che il metodo di logged_in? è protetto nonostante il file features/step_definitions/ra_env.rb chiamante:
    ApplicationController.send(:public, :logged\_in?, :current\_user, :authorized?)
    Non quella chiamata fare quei metodi disponibili senza bisogno di sradicamento?

Oh, e sto cercando di eseguire Autospec, così ho fatto i seguenti comandi per farlo partire:

export AUTOFEATURE=true
rake spec:server:start
ruby script/autospec
È stato utile?

Soluzione

Ho fatto qualche ricerca e qui è quello che ho ottenuto. Il ra_response_steps.rb aspettano reindirizzare a venire greggio e quindi la storia di definire wether il redirect dovrebbe essere seguita o meno. Questo sta fallendo perché implementazione Webrat sessione ha il seguente codice:

    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

Si noti la if internal_redirect? ... end. Questo, se è quello che prende i nostri test in mancanza perché Webrat sta seguendo i reindirizzamenti. Come soluzione alternativa, è possibile commentare quelle linee sulla vostra sessione di Webrat ma questo non è probabilmente una soluzione decente. Lavorerò un po 'di più e postare una patch da qualche parte.

Altri suggerimenti

Ho trovato questo post del blog che spiega il punto cruciale della questione ben:

http: //blog.andrew .premdas.org / articoli / 2008/10/15 / Webrat-visite-e-reindirizza

In sostanza, i test di autenticazione riposanti stanno cercando di provare qualcosa che non dovrebbe essere testato utilizzando Webrat. Quindi, il cambiamento raccomandata di cui sopra è il contrario di quello che penso probabilmente dovrebbe essere modificato.

Ho cambiato i test di autenticazione riposante in modo che essi non prova redirect, ma solo testare quale pagina si finisce su. Tuttavia, ci sembra ancora essere un problema con alcuni redirect che non capisco:

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)

Non capisco dove questo example.com proviene. chiunque altro ha un errore simile?

Ho dovuto cambiare la definizione della funzione di logout in user_steps.rb a:

def log_out
get '/ logout'
fine

Prima che stava cercando di ottenere '/ session / distruggere' che esiste solo se non si rimuovono le rotte di default.

Inoltre, assicuratevi di "includere AuthenticatedSystem" in application_controller.

Ancora combattendo attraverso alcune delle altre questioni, però ...

Per quanto riguarda il problema "Metodo protetto", ho capito che, se io non uso Autospec e lasciare config.cache_classes = vero, allora i test passano.

Per quanto config.cache_classes = false introduce nuovamente l'errore.

Sembra che il problema è o con il modo di classe di caching è implementato in rotaie, o come RSpec gestisce le classi che sono state create. Purtroppo non ho le risorse per indagare su questo un intero registro più, e sembra che ci sia una buona discussione su di esso che si svolgono a: http://groups.google. com / gruppo / rspec / browse_thread / thread / 500ede090bd08996 / 25a3d9a7d283696b? lnk = GST & q = cache_classes # 25a3d9a7d283696b

Non ho un sacco di orientamento da offrire, solo la simpatia - Ho passato un paio d'ore di recente che fare con lo stesso problema. D'altro canto, è così che ho imparato RSpec.

Una cosa che ho trovato è che un sacco di fallimenti erano cose che volevo cambiare in ogni caso -. Per esempio, non ho voglia di reindirizzare a '/' il login, ma da qualche altra parte

Alla fine, la maggior parte dei fallimenti erano semplici da risolvere, una volta che avevo capito dove guardare.

sto lavorando attraverso gli stessi problemi. Io non sono ancora arrivati, ma credo che ApplicationController.send (: pubblico,: logged_in ?,: CURRENT_USER,:? Autorizzato). Ha bisogno di andare a sostegno / env.rb invece

ho alcuni degli errori menzionati, anche. Ma il primo problema che si verificano nella mia app è questo:

più definizioni step hanno lo stesso Regexp:

caratteristiche / step_definitions / user_steps.rb: 16: in /^(.*) (.*) user named '(.*)'$/' features/step_definitions/user_steps.rb:29:in / ^ non c'è alcun utente di nome '((*.). *) '$ /'

(cetriolo :: ridondante)

Certo, posso risolvere questo problema, ma molti più errori seguirò (compreso il logged_in protetto? Metodo sul controller, i RSpecs fallimento e così via).

Qualcuno sa, se lo facciamo tutti somthing fondamentalmente sbagliato qui? O è solo che restful_authentication è rotto nella sua versione attuale?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top