Question : le concombre et le webrat ne trouvant pas des rails clignotent message

ainsi j'ai un dispositif d'engagement de concombre qui si l'engagement est réussi recherche le rendement « enregistrement réussi » dans le HTML. Je sais qu'il est là parce que je peux le voir dans le navigateur mais le concombre ne trouve pas it.
class= > " clair " de
> de " codeSnippet " de class= de
class= " lineNumbers " de
class= de
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 " de l'id= " codeSnippet859384 " de
           
class= de

Réponse : le concombre et le webrat ne trouvant pas des rails clignotent message

OK… Voici le contenu du jon de poteau de blog…

Rubis : Using le reset_session dans des rails avec le concombre et le Webrat
J'ai classé le bogue suivant :

    Tous les guides de degré de sécurité de rails disent que vous devriez appeler le reset_session après que l'utilisateur ouvre une session ou se déconnecte. Ceci dégage dehors la session et force une nouvelle identification de session pour être créé. Il semble qu'il y a eu quelques bogues de rails liés au reset_session au cours des années. Cependant, je suis maintenant inquiété qu'il y ait un conflit quelque part lié à l'infrastructure et/ou au Webrat de l'essai des rails.

    Dans mon action d'ouverture, j'appelle le reset_session et puis mets un message gentil dans le flash. Quand j'emploie réellement le site Web, je peux voir (par l'intermédiaire de Firefox) que j'obtiens une nouvelle identification de session, et je peux voir mon message instantané. Cependant, quand j'écris des essais pour ces deux choses, le message instantané perd, et je n'obtiens pas une nouvelle identification de session en mes biscuits. Elle est presque comme si la nouvelle session est ignorée, et la vieille session est employée.

    Je suis désolé, mais je ne peux pas dire exactement où le problème est. Je sais qu'il y a le code spécial de rails qui manipule des biscuits de session quand vous faites l'essai d'intégration.

    J'emploie actionpack-2.3.8 et webrat-0.7.1.

Voici comment j'ai fait mon meilleur pour travailler autour du problème.

Tout d'abord, je stocke mes sessions dans la base de données. Par conséquent, j'ai créé un modèle d'ActiveRecord pour supprimer manuellement des disques de session :

le reset_session de session <� ActiveRecord::Base="">  # de rails de classe n'a été rien mais ennui pour nous.  Je prends
  # importe dans mes propres mains.  Ce code devra changer si nous nous arrêtons
  # mettant nos sessions dans la base de données.
  def self.nuke_session (session_id)
    find_by_session_id ! (session_id) .destroy
  extrémité
extrémité

Puisque je suis utilisation authlogic, mon action de déconnexion regarde n'importe quoi de pareil :

le def détruisent
  current_user_session.destroy

  # éviter les attaques de fixation de session.  Ceci peut sembler superflu, mais il était
  # nécessaire de faire le passage d'essais.
  session [: test_that_this_disappears] = « correct »
  session_id = biscuits [ActionController : : Base.session_options [: clef]]
  Session.nuke_session (session_id)
  reset_session

  redirect_to : => d'action : logged_out
extrémité

Mon action d'ouverture est n'importe quoi de pareil :

le def créent
  @user_session = UserSession.new (param [: user_session])
  à moins que @user_session.valid ?
    le retour rendent : => d'action : nouveau
  extrémité

  # éviter les attaques de fixation de session en remettant à zéro la session.
  reset_session
  @user_session = UserSession.new (param [: user_session])
  @user_session.save !

  # pour quelque raison, le flash, le reset_session, le concombre, etc. ne subsistent pas,
  # ainsi je dois passer le message instantané par l'intermédiaire d'un paramètre.
  redirect_to (root_url (: => d'ouverture 1))
extrémité

Au lieu de placer un message par l'intermédiaire du flash, je passe un paramètre de question.

Je vérifie ce paramètre dans mon ApplicationController :

before_filter : check_for_login_message

# pour quelque raison, le flash, le reset_session, le concombre, etc. ne subsistent pas.
# par conséquent, après ouverture, nous devons passer le message instantané par l'intermédiaire d'un paramètre de question
# plutôt que par l'intermédiaire du flash.
#
# si je dois faire ce genre de chose encore, je créerai une table de consultation complètement
# des messages.
check_for_login_message de def
  flash.now [: success_message] = « ouverture réussie ! » si param [: ouverture]
extrémité

En conclusion, j'ai ceci dans un dossier de dispositif :

# cet essai devrait fonctionner.  En fait, cela fonctionne quand vous employez votre navigateur.
# cependant, il y a un bogue quelque part entre les rails et le Webrat qui empêche
# il du travail quand vous employez le concombre.  De façon ou d'autre, le reset_session est cassé.
#
# scénario : ouvrir une session devrait infirmer votre biscuit de session
# donné je suis sur la page d'accueil
# quand je regarde mon biscuit de session
# et moi suis ouvert une session
# alors je devrais prendre un biscuit différent de session

Cet essai se fonde sur ces étapes :

# cet essai devrait fonctionner.  En fait, cela fonctionne quand vous employez votre navigateur.
# cependant, il y a un bogue quelque part entre les rails et le Webrat qui empêche
# il du travail quand vous employez le concombre.  De façon ou d'autre, le reset_session est cassé.
#
# le regard donné de/^I à ma session cookie$/font
# @cookie = biscuits [ActionController : : Base.session_options [: clef]]
# extrémité
#
# alors/^I devrait avoir une session différente cookie$/fait
# new_cookie = biscuits [ActionController : : Base.session_options [: clef]]
# @cookie de == d'ould_not de new_cookie.sh
# extrémité
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us