Em Rails, testamos as várias actions de um controller escrevendo testes funcionais. Controllers manipulam a entrada das requisições web para sua aplicação, eventualmente renderizando views.
1. O que você inclui nos seus testes funcionais
Você deve testar coisas como:
-
a requisição web foi bem sucedida?
-
o usuário foi redirecionado para a página correta?
-
o usuário foi autenticado com sucesso?
- a mensagem exibida para o usuário na view estava correta?
Quando você usa script/generate para criar um controller, isso automaticamente cria um teste funcional para este controller em test/functional. Por exemplo, se você criar um controller post:
$ script/generate controller post
...
create app/controllers/post_controller.rb
create test/functional/post_controller_test.rb
...
Agora, se você der uma olhada no arquivo posts_controller_test.rb no diretório test/functional você deverá ver:
require 'test_helper'
class PostsControllerTest < ActionController::TestCase
# Replace this with your real tests.
def test_truth
assert true
end
end
Claro, você precisa substituir a simples assertion por um teste
real. Aqui há o ínicio de um exemplo de um teste funcional:
def test_should_get_index
get :index
assert_response :success
assert_not_nil assigns(:posts)
end
No teste test_should_get_index, o Rails simula uma requisição na
action index, certificando-se que a requisição foi bem sucedida e
também garantindo que é associado um post válido à variável de
instância.
O método get arranca a solitação web e popula o resultado para a resposta. Ele aceita 4 argumentos:
- A action do controller que você está requisitando. Isso pode estar na forma de string ou simbolo.
- Um hash opcional de parâmetros (request) para passar para a action (eg. query string parameters or post variables).
- Um hash opcional de variáveis de sessão para passar juntamente com a requisição.
- Um hash opicional de valores flash (flash messages).
Exemplo: chamando a action :show, passando um id 12 como parâmetro e colocando um user_id como 5 na sessão:
get(:show, {'id' => "12"}, {'user_id' => 5})
Outro exemplo: Chamando a action :view, passando um id igual a 12 como parâmetro, desta vez sem sessão, mas com uma mensagem flash.
get(:view, {'id' => '12'}, nil, {'message' => 'booya!'})
2. Tipos de Requisições Disponíveis para Testes Funcionais
Se você estiver familiarizado com o protocolo HTTP, você saberá que get é um tipo de requisição (request). Existem 5 tipos de requisições (requests) suportados nos testes funcionais do Rails:
Todos esses tipos de requisições são métodos que você pode usar, porém, provavelmente você acabará usando o primeiro duas vezes mais que os outros.
3. The 4 Hashes of the Apocalypse
Após uma requisição ser feita e processada usando um desses 5 métodos, você terá 4 objetos hash prontos para o uso:
-
assigns - Todos os objetos que são armazenados em actions como variáveis de instancia a serem utilizados nas views.
-
cookies - Any cookies that are set.
-
flash - Todos os objetos que vivem no flash.
-
session - Todos os objetos que vivem nas variáveis de sessão.
Como acontece com os objetos hash normais, você pode acessar os valores referenciando as chaves através de uma string. Você também pode referenciá-los com um nome simbolo, exceto para assigns. Por exemplo:
flash["gordon"] flash[:gordon]
session["shmession"] session[:shmession]
cookies["are_good_for_u"] cookies[:are_good_for_u]
# Because you can't use assigns[:something] for historical reasons:
assigns["something"] assigns(:something)
Tradução da página: Guia Rails