22
Dez 08

  def assert_invalid(record, message)
   deny record.valid?, message
 end
 
 def deny(condition, message)
   assert !condition, message
 end
 
 def assert_association
(objeto, objeto2, message)
   association = objeto.reflect_on_association(objeto2)
   assert association, message
 end

 

def assert_has_one(objeto, objeto2, message)
 
  association = objeto.reflect_on_association(objeto2)
  
assert_equal :has_one, association.macro, message
 end
 
 def assert_has_many
(objeto, objeto2, message)
   association = objeto.reflect_on_association(objeto2)
   assert_equal :has_many, association.macro, message
 end
 
 def assert_belongs_to(objeto, objeto2, message)
   association = objeto.reflect_on_association(objeto2)
   assert_equal :belongs_to, association.macro, message
 end
 

publicado por dessa às 20:19
tags: ,

03
Nov 08

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:

  • get

  • post

  • put

  • head

  • delete

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

 

publicado por dessa às 17:02
tags:

Dezembro 2009
Dom
Seg
Ter
Qua
Qui
Sex
Sab

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


subscrever feeds
pesquisar
 
Subscrever por e-mail

A subscrição é anónima e gera, no máximo, um e-mail por dia.

blogs SAPO