Pergunta : o pepino e o webrat que não encontram os trilhos piscam mensagem

assim eu tenho uma caraterística do signup do pepino que se o signup é bem sucedido procure a saída “registo bem sucedido” no HTML. Eu sei que está lá porque eu posso a ver no navegador mas o pepino não está encontrando it.
class= > " desobstruído " do
> do " codeSnippet " do class= do
class= " lineNumbers " do
class= do
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 " do id= " codeSnippet859384 " do
           
class= do

Resposta : o pepino e o webrat que não encontram os trilhos piscam mensagem

APROVAÇÃO… Está aqui o índice do jon do borne do blogue…

Rubi: Using o reset_session nos trilhos com pepino e Webrat
Eu arquivei o seguinte erro:

    Todos os guias da segurança dos trilhos dizem que você deve chamar o reset_session depois que o usuário entra ou registra para fora. Isto cancela para fora a sessão e força uma identificação nova da sessão para ser criado. Parece que houve alguns erros dos trilhos relativos ao reset_session sobre os anos. Entretanto, eu sou preocupado agora que há um conflito relativo em algum lugar à infra-estrutura e/ou ao Webrat do teste dos trilhos.

    Em minha ação do início de uma sessão, eu chamo o reset_session e põr então uma mensagem agradável no flash. Quando eu uso realmente o Web site, eu posso ver (através de Firefox) que eu estou começ uma identificação nova da sessão, e eu posso ver minha mensagem instantânea. Entretanto, quando eu escrevo testes para aquelas duas coisas, a mensagem instantânea começ perdida, e eu não começ uma identificação nova da sessão em meus bolinhos. É quase como se a sessão nova está sendo ignorada, e a sessão velha está sendo usada.

    Eu sou pesaroso, mas eu não posso dizer exatamente onde o problema está. Eu sei que há o código especial dos trilhos que segura bolinhos da sessão quando você está fazendo o teste da integração.

    Eu estou usando actionpack-2.3.8 e webrat-0.7.1.

É aqui como eu fiz meu melhor para trabalhar em torno do problema.

Antes de mais nada, eu estou armazenando minhas sessões na base de dados. Daqui, eu criei um modelo de ActiveRecord para suprimir manualmente de registros da sessão:

o reset_session da sessão <� ActiveRecord::Base="">  # dos trilhos da classe não foi nada mas problema para nós.  Eu estou tomando
  # importa em minhas próprias mãos.  Este código terá que mudar se nós paramos
  # põr nossas sessões na base de dados.
  def self.nuke_session (session_id)
    find_by_session_id! (session_id) .destroy
  extremidade
extremidade

Desde que eu sou se usar authlogic, minha ação da saída olha qualquer outra coisa semelhante:

o def destrói
  current_user_session.destroy

  # evitar ataques da fixação da sessão.  Isto pode parecer redundante, mas era
  # necessário fazer a passagem dos testes.
  sessão [: test_that_this_disappears] = “aprovado”
  session_id = bolinhos [ActionController:: Base.session_options [: chave]]
  Session.nuke_session (session_id)
  reset_session

  redirect_to: => da ação: logged_out
extremidade

Minha ação do início de uma sessão é qualquer outra coisa semelhante:

o def cria
  @user_session = UserSession.new (params [: user_session])
  a menos que @user_session.valid?
    o retorno rende: => da ação: novo
  extremidade

  # evitar ataques da fixação da sessão restaurando a sessão.
  reset_session
  @user_session = UserSession.new (params [: user_session])
  @user_session.save!

  # por qualquer motivo, o flash, o reset_session, o pepino, etc. não começ longitudinalmente,
  # assim eu tenho que passar a mensagem instantânea através de um parâmetro.
  redirect_to (root_url (: => 1 do início de uma sessão))
extremidade

Em vez de ajustar uma mensagem através do flash, eu passo um parâmetro da pergunta.

Eu verific para ver se há este parâmetro em meu ApplicationController:

before_filter: check_for_login_message

# por qualquer motivo, o flash, o reset_session, o pepino, etc. não começ longitudinalmente.
# daqui, após o início de uma sessão, nós temos que passar a mensagem instantânea através de um parâmetro da pergunta
# um pouco do que através do flash.
#
# se eu tenho que fazer este tipo da coisa outra vez, eu criarei uma tabela de consulta completamente
# das mensagens.
check_for_login_message do def
  flash.now [: success_message] = “início de uma sessão bem sucedido!” se params [: início de uma sessão]
extremidade

Finalmente, eu tenho este em uma lima da caraterística:

# este teste deve trabalhar.  De fato, trabalha quando você usa seu navegador.
# entretanto, há um erro em algum lugar entre os trilhos e o Webrat que impede
# ele do trabalho quando você usar o pepino.  De algum modo, o reset_session é quebrado.
#
# encenação: entrar deve invalidar seu bolinho da sessão
# dado eu estou no homepage
# quando eu olhar meu bolinho da sessão
# e mim são entrados
# então eu devo comer um bolinho diferente da sessão

Esse teste confia nestas etapas:

# este teste deve trabalhar.  De fato, trabalha quando você usa seu navegador.
# entretanto, há um erro em algum lugar entre os trilhos e o Webrat que impede
# ele do trabalho quando você usar o pepino.  De algum modo, o reset_session é quebrado.
#
# o olhar dado de/^I em minha sessão cookie$/faz
# @cookie = bolinhos [ActionController:: Base.session_options [: chave]]
# extremidade
#
# então/^I deve ter uma sessão diferente cookie$/faz
# new_cookie = bolinhos [ActionController:: Base.session_options [: chave]]
# @cookie do == do ould_not de new_cookie.sh
# extremidade
Outras soluções  
 
programming4us programming4us