Pergunta

Eu comecei a escrever testes funcionais para os meus rails app hoje. Eu uso o plugin de autenticação RESTful. Corri para um par de confundir coisas que eu espero que alguém possa esclarecer para mim.

1) Eu escrevi uma função de login rápido, porque a maioria das funções em meus trilhos aplicativo requer autenticação.

def login_as(user)
   @request.session[:user_id] = user ? user.id : nil
end

O problema que vejo com esta função, é basicamente finge autenticação. Eu deveria me preocupar com isso? Talvez é bom para ir por esse caminho, enquanto eu testar o verdadeiro método de autenticação em algum lugar. Ou talvez esta é uma prática terrível.

2) A segunda coisa confusa é que em alguns lugares em meus testes funcionais, eu preciso do processo de autenticação completa para acontecer. Quando um usuário é ativado, eu tenho o método do_activate criar alguns objetos iniciais para o utilizador. É análogo à criação de um objeto de caderno em branco e objeto pena para uma aplicação de estudante, se isso faz sentido.

Assim, a fim de testar adequadamente o meu pedido, eu preciso do usuário para atingir esse estado de ativação para que esses objetos são criados. Atualmente, estou usando Factory Girl para criar o usuário, em seguida, chamar a função login_as acima para autenticação falsa.

Eu acho que outra opção seria ignorar a sequência de autenticação completa e apenas criar os objetos em branco com Factory Girl. Eu poderia testar a autenticação adequada em outro lugar.

O que você acha? Se eu deveria passar por seqüência correta, porque não é o código abaixo invocando a função do_activate?

user = Factory.create(:user)
user.active = 1
user.save

Obrigado!

Foi útil?

Solução

Fingindo é perfeitamente aceitável.

No entanto, escrever outros testes que garantam que as coisas que você quer protegido são protegidos. Então

test "it should show the profile page" do
  user = Factory(:user)
  login_as(user)
  get :show, :id => user
  assert_response :success
end

test "it should not show the profile page cos I'm not logged in" do
  user = Factory(:user)
  get :show, :id => user
  assert_response :redirect
end

Sinta-se livre para me bater-se para followups!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top