Factory Girl / Capybara excluindo registros do meio do teste do banco de dados?

Trabalhando com o RSpec & Capybara, estou obtendo um modo interessante de falha de teste que desaparece com alguns rearranjos sutis de linhas no caso de teste ... coisas que não devem importa

Estou desenvolvendo meu próprio sistema de autenticação. No momento, ele está funcionando e posso fazer login / logout com o navegador, a sessão funciona etc. etc. No entanto, tentar testar isso está falhando. Está acontecendo algo que eu não entendo direito, o que parece depender da ordem das chamadas (aparentemente) não relacionada

require 'spec_helper'

describe "Sessions" do
  it 'allows user to login' do
    #line one
    user = Factory(:user)
    #For SO, this method hashes the input password and saves the record
    user.password! '2468'

    #line two
    visit '/sessions/index'


    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => '2468'
    click_button 'Sign in'

    page.should have_content('Logged in')
  end
end

Como é, esse teste falha ... o login falha. Após inserir chamadas de 'depurador' nas especificações e no controlador, posso ver o porquê: o usuário não está sendo inserido no banco de dados no que diz respeito ao controlador:

Edita adicionando no ApplicationController

class ApplicationController < ActionController::Base
  helper :all
  protect_from_forgery

  helper_method :user_signed_in?, :guest_user?, :current_user

  def user_signed_in?
    !(session[:user_id].nil? || current_user.new_record?)
  end

  def guest_user?
    current_user.new_record?
  end

  def current_user
    @current_user ||= session[:user_id].nil? ? User.new : User.find(session[:user_id])
  rescue ActiveRecord::RecordNotFound
    @current_user = User.new
    flash[:notice] = 'You\'ve been logged out.'
  end
end


class SessionsController < ApplicationController
  def login
    user = User.where(:email=>params[:user][:email]).first

    debugger ###

    if !user.nil? && user.valid_password?(params[:user][:password])
      #engage session
    else
      #run away
    end
  end

  def logout
    reset_session
    redirect_to root_path, :notice => 'Logget Out.'
  end
end

no console, no ponto de interrupção acima:

1.9.2 vox@Alpha:~/Sites/website$ rspec spec/controllers/sessions_controller_spec.rb 
/Users/vox/Sites/website/app/controllers/sessions_controller.rb:7
if !user.nil? && user.valid_password?(params[:user][:password])
(rdb:1) irb
ruby-1.9.2-p180 :001 > User.all.count
 => 0 
ruby-1.9.2-p180 :002 > 

No entanto, se eu reorganizar algumas linhas no meu teste, colocando a linha 'dois' acima da linha 'um':

describe "Sessions" do
  it 'allows user to login' do
    #line two
    visit '/sessions/index'

    #line one
    user = Factory(:user)
    #For SO, this method hashes the input password and saves the record
    user.password! '2468'


    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => '2468'
    click_button 'Sign in'

    page.should have_content('Logged in')
  end
end

Eu recebo isso no console (o mesmo ponto de interrupção acima):

1.9.2 vox@Alpha:~/Sites/website$ rspec spec/controllers/sessions_controller_spec.rb 
/Users/vox/Sites/website/app/controllers/sessions_controller.rb:7
if !user.nil? && user.valid_password?(params[:user][:password])
(rdb:1) irb
ruby-1.9.2-p180 :001 > User.all.count
 => 1 

or uma questão de brevidade, omiti o despejo completo do conteúdo do objeto de usuário, mas posso garantir que o teste é concluído conforme o esperad

Este comportamento de trocar de linha para que o teste seja aprovado não se encaixa muito bem na minha ideia do que deve estar acontecendo com esses comandos e provou ser uma boa prova para os meus testes em outras área

Alguma dica sobre o que está acontecendo aqu

Procurei no google e no SO por idéias que apresentassem esse problema, e não faltam perguntas sobre o RSpec / Capybara e Sessions. Porém, nada parecia se encaixar perfeitamente.

Obrigado por procurar.

Atualiza

Adicionei um ponto de interrupção (pouco antes de uma chamada de visita) e algumas depurações ao teste e volto com isso:

(rdb:1) user
#<User id: 1, login_count: 1, email: "[email protected]", encrypted_password: "11f40764d011926eccd5a102c532a2b469d8e71249f3c6e2f8b...", salt: "1313613794">
(rdb:1) User.all
[#<User id: 1, login_count: 1, email: "[email protected]", encrypted_password: "11f40764d011926eccd5a102c532a2b469d8e71249f3c6e2f8b...", salt: "1313613794">]
(rdb:1) next
/Users/vox/Sites/website/spec/controllers/sessions_controller_spec.rb:19
fill_in 'Email', :with => user.email
(rdb:1) User.all
[]

Então, claramente, algo ao longo do caminho que a visita faz é dizer à Factory Girl que ela terminou com o objeto de usuário e ela a exclu

Edita Após inspecionar test.log cuidadosamente, nada está emitindo nenhuma exclusão. Então, estou mais ou menos de volta à estaca zer

questionAnswers(4)

yourAnswerToTheQuestion