Questione : il cetriolo e il webrat che non trovano le rotaie infiammano messaggio

così ho una caratteristica di impegno del cetriolo che se l'impegno riesce cerca l'uscita “registro riuscito„ nel HTML. So che è là perché posso vederlo nel browser ma il cetriolo non sta trovando it.
class= > " libero " del
> " del codeSnippet " del class= del
class= " lineNumbers " del
class= del
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
class= >#signup.feature " notpretty " del id= " codeSnippet859384 " del
           
class= del

Risposta : il cetriolo e il webrat che non trovano le rotaie infiammano messaggio

APPROVAZIONE… Qui è il contenuto del jon dell'alberino del blog…

Rubino: Using il reset_session in rotaie con il cetriolo e Webrat
Ho archivato il seguente insetto:

    Tutte le guide di sicurezza delle rotaie dicono che dovreste denominare il reset_session dopo che l'utente entra o annota fuori. Ciò elimina fuori la sessione e forza una nuova identificazione di sessione per essere generata. Sembra che ci siano stati alcuni insetti delle rotaie relativi al reset_session nel corso degli anni. Tuttavia, ora sono preoccupato che ci sia un conflitto in qualche luogo relativo all'infrastruttura e/o a Webrat di prova delle rotaie.

    Nella mia azione di inizio attività, denomino il reset_session ed allora metto un messaggio piacevole nel flash. Quando realmente uso il Web site, posso vedere (via Firefox) che sto ottenendo una nuova identificazione di sessione e posso vedere il mio messaggio istantaneo. Tuttavia, quando scrivo le prove per quelle due cose, il messaggio istantaneo ottiene perso e non ottengo una nuova identificazione di sessione in miei biscotti. È quasi come se la nuova sessione stia ignoranda e la vecchia sessione sta usanda.

    Sono spiacente, ma non posso dire esattamente dove il problema è. So che ci è codice speciale delle rotaie che tratta i biscotti di sessione quando state facendo la prova di integrazione.

    Sto usando actionpack-2.3.8 e webrat-0.7.1.

Qui è come ho fatto il mio meglio per lavorare intorno al problema.

In primo luogo, sto immagazzinando le mie sessioni nella base di dati. Quindi, ho generato un modello di ActiveRecord per cancellare manualmente le annotazioni di sessione:

il reset_session di sessione <� ActiveRecord::Base="">  # delle rotaie del codice categoria è stato niente ma difficoltà per noi.  Sto prendendo
  # importa nelle mie proprie mani.  Questo codice dovrà cambiare se ci arrestiamo
  # mettendo le nostre sessioni nella base di dati.
  def self.nuke_session (session_id)
    find_by_session_id! (session_id) .destroy
  estremità
estremità

Poiché sono usando authlogic, la mia azione di termine attività osserva qualcosa di simile:

il def distrugge
  current_user_session.destroy

  # evitare gli attacchi di fissazione di sessione.  Ciò può sembrare ridondante, ma era
  # necessario fare il passaggio delle prove.
  sessione [: test_that_this_disappears] = “giusto„
  session_id = biscotti [ActionController:: Base.session_options [: chiave]]
  Session.nuke_session (session_id)
  reset_session

  redirect_to: => di azione: logged_out
estremità

La mia azione di inizio attività è qualcosa di simile:

il def genera
  @user_session = UserSession.new (params [: user_session])
  a meno che @user_session.valid?
    il ritorno rende: => di azione: nuovo
  estremità

  # evitare gli attacchi di fissazione di sessione ripristinando la sessione.
  reset_session
  @user_session = UserSession.new (params [: user_session])
  @user_session.save!

  # per qualche motivo, il flash, il reset_session, il cetriolo, ecc. non ottengono avanti,
  # così devo passare il messaggio istantaneo via un parametro.
  redirect_to (root_url (: => di inizio attività 1))
estremità

Invece di regolazione del messaggio via il flash, passo un parametro di domanda.

Controllo per vedere se c'è questo parametro nel mio ApplicationController:

before_filter: check_for_login_message

# per qualche motivo, il flash, il reset_session, il cetriolo, ecc. non ottengono avanti.
# quindi, dopo l'inizio attività, dobbiamo passare il messaggio istantaneo via un parametro di domanda
# piuttosto che via il flash.
#
# se devo ripetere questo genere di cosa, genererò una tabella di occhiata in pieno
# dei messaggi.
check_for_login_message del def
  flash.now [: success_message] = “inizio attività riuscito!„ se params [: inizio attività]
estremità

Per concludere, ho questo in una lima della caratteristica:

# questa prova dovrebbe funzionare.  Infatti, funziona quando usate il vostro browser.
# tuttavia, ci è un insetto in qualche luogo fra le rotaie e Webrat che evita
# esso dal funzionamento quando usate il cetriolo.  In qualche modo, il reset_session è rotto.
#
# piano d'azione: il collegamento dovrebbe invalidare il vostro biscotto di sessione
# dato sono sul homepage
# quando esamino il mio biscotto di sessione
# ed io sono entrati
# allora dovrei mangiare un biscotto differente di sessione

Quella prova conta su questi punti:

# questa prova dovrebbe funzionare.  Infatti, funziona quando usate il vostro browser.
# tuttavia, ci è un insetto in qualche luogo fra le rotaie e Webrat che evita
# esso dal funzionamento quando usate il cetriolo.  In qualche modo, il reset_session è rotto.
#
# lo sguardo dato di/^I alla mia sessione cookie$/fa
# @cookie = biscotti [ActionController:: Base.session_options [: chiave]]
# estremità
#
# allora/^I dovrebbe avere una sessione differente cookie$/fa
# new_cookie = biscotti [ActionController:: Base.session_options [: chiave]]
# @cookie del == del ould_not di new_cookie.sh
# estremità
Altre soluzioni  
 
programming4us programming4us