Ruby on Rails testes funcionais com o plugin de autenticação RESTful
-
22-08-2019 - |
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!
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!