Fråga : gurkan och webrat som inte finner stänger, exponerar meddelandet

så jag har ett gurkasignupsärdrag som, om signupen är lyckad söker efter den tillverkade ”registreringen som är lyckad” i htmlen. Jag vet att det är där, därför att jag kan se det i webbläsaren, men gurkan inte finner it.
> för
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:
" codeBody " class= " notpretty " >#signup.feature för
" klar "

Svar : gurkan och webrat som inte finner stänger, exponerar meddelandet

REKO…, Är här det nöjt av blogen postar… jon

Ruby: Using reset_session i stänger med gurkan och Webrat
Jag sparade efter bugga:

    Alla stångsäkerhet vägleder något att säga att dig bör appellreset_sessionen, efter användaren har loggat in eller har loggat ut. Detta görar klar ut perioden och tvingar en ny periodsLEGITIMATION som ska skapas. Det verkar där har varit några stänger buggar släkt till reset_sessionen över åren. Emellertid I-förmiddagen oroade nu att det finns en konflikt någonstans släkt till stängers testa infrastruktur och/eller Webrat.

    I min inloggningshandling I-appellreset_session och därefter satt ett trevligt meddelande i pråligt. När jag använder faktiskt websiten, jag kan se (via Firefox) att I-förmiddagen som får en ny periodsLEGITIMATION och jag kan se mitt pråliga meddelande. Emellertid när jag skriver, testar för den två saker, det pråliga meddelandet får borttappadt, och jag får inte en ny periodsLEGITIMATION i min kakor. Den är nästan som, om den nya perioden ignoreras, och den gammala perioden används.

    Ledsen förmiddag I, utan jag kan inte berätta exakt var problemet är. Jag vet att det finns speciala stänger kodifierar att handtagperiodskakor, när du gör att testa för integration.

    Förmiddag I using actionpack-2.3.8 och webrat-0.7.1.

Är här hur jag gjorde mitt bäst för att fungera runt om problemet.

Först allra, I-förmiddag som lagrar min perioder i databasen. Hence jag skapade en ActiveRecord modellerar manuellt för att ta bort periodsrekord:

klassificera den periods- <� ActiveRecord::Base="">  nr. stängers reset_sessionen har varit ingenting utom besvärar för oss.  Ta för förmiddag I
  nr. materier in i mitt eget räcker.  Detta kodifierar ska måste att ändra, om vi stoppar
  nr. sätta våra perioder i databasen.
  def self.nuke_session (session_id)
    find_by_session_id! (session_id) .destroy
  avsluta
avsluta

Sedan I-förmiddag using authlogic, min logouthandlinglooks något något liknande detta:

def förstör
  current_user_session.destroy

  Nr. undvik periodsfixationattacker.  Detta kan verka överflödigt, men den var
  nr. nödvändigt att göra testar passerar.
  period [: test_that_this_disappears] = ”ok”,
  session_id = kakor [ActionController:: Base.session_options [: stämma]],
  Session.nuke_session (session_id)
  reset_session

  redirect_to: handling=>: logged_out
avsluta

Min inloggningshandling är något något liknande detta:

def skapar
  @user_session = UserSession.new (params [: user_session])
  om inte @user_session.valid?
    retur framför: handling=>: nytt
  avsluta

  Nr. undvik periodsfixationattacker, genom att nollställa perioden.
  reset_session
  @user_session = UserSession.new (params [: user_session])
  @user_session.save!

  Nr. för något resonera, pråligt, reset_sessionen, gurkan, Etc. får inte along,
  nr. så jag måste att passera det pråliga meddelandet via en parameter.
  redirect_to (root_url (: inloggnings=> 1))
avsluta

I stället för inställning av ett meddelande via pråligt jag passerar en queryparameter.

Jag kontrollerar för denna parameter i min ApplicationController:

before_filter: check_for_login_message
…,
Nr. för något resonera, pråligt, reset_sessionen, gurkan, Etc. får inte along.
Nr. Hence, efter inloggning, vi måste att passera det pråliga meddelandet via en queryparameter
nr. ganska än via pråligt.
nr.
Nr., om jag måste att göra denna sort av tinget igen, jag ska skapar en referens bordlägger mycket
nr. av meddelanden.
defcheck_for_login_message
  flash.now [: success_message] = ”lyckad inloggning!”, om params [: inloggning]
avsluta

Slutligen jag har denna i ett särdrag att spara:

Nr. detta testar bör fungera.  I faktum det fungerar, när du använder din webbläsare.
Nr. emellertid, det finns en bugga någonstans mellan stänger och Webrat som förhindrar
nr. det från arbete, när du använder gurkan.  Somehow reset_sessionen är bruten.
nr.
Nr. scenario: inloggning bör göra din periodskaka ogiltig
Nr. given I-förmiddag på homepagen
Nr., när jag ser min periodskaka
Nr. och loggad in I-förmiddag
Nr. därefter jag bör ha en olik periodskaka

Att testa, relies på dessa kliver:

Nr. detta testar bör fungera.  I faktum det fungerar, när du använder din webbläsare.
Nr. emellertid, det finns en bugga någonstans mellan stänger och Webrat som förhindrar
nr. det från arbete, när du använder gurkan.  Somehow reset_sessionen är bruten.
nr.
Nr. den givna -/^Ilooken på min period cookie$/gör
nr. @cookie = kakor [ActionController:: Base.session_options [: stämma]],
nr. avsluta
nr.
Nr. därefter/^I bör ha en olik period cookie$/gör
nr. new_cookie = kakor [ActionController:: Base.session_options [: stämma]],
nr. @cookie för new_cookie.sh ould_not==
nr. avsluta
Andra lösningar  
 
programming4us programming4us