Criando testes unitários com Ruby on Rails
Olá pessoal.
Após ter criado os models precisamos criar testes de unidade para validar as operações que iremos realizar.
Para isso acesse a pasta do seu projeto:
cd projetorails
Execute o comando abaixo para criar todos os bancos incluindo o banco de teste:
rake db:create:all
A saída do comando deve ser algo igual à:
db/production.sqlite3 already exists
db/development.sqlite3 already exists
db/test.sqlite3 already exists
Altere o ambiente de desenvolvimento para ambiente de teste:
rake db:migrate RAILS_ENV=test
Remova todo o conteúdo do arquivo test/fixtures/contatos.yml e adicione o conteúdo que será utilizado para gerar os testes:
contato: telefone: 11 2222 3333 celular: 11 9999 8888 twitter: monteirobrena facebook: monteirobrena msn: brenamonteiro@hotmail.com
Observação: é necessário manter a identação neste arquivo para diferenciar as propriedades do Contato.
Crie o teste unitário que verificará as operações que você pode fazer com o model Contato:
require 'test/test_helper'
class ContatoTest < ActiveSupport::TestCase
fixtures :contatos
def test_create_contato
# Cria o contato com o conteúdo especificado no arquivo test/fixtures/contatos.yml.
contato_brena = Contato.new :telefone => contatos(:contato).telefone,
:celular => contatos(:contato).celular,
:twitter => contatos(:contato).twitter,
:facebook => contatos(:contato).facebook,
:msn => contatos(:contato).msn
end
def test_save_contato contato_brena
# Verifica se consegue salvar o contato.
assert contato_brena.save
end
def test_copy_contato
# Cria o contato.
contato_brena = test_create_contato
# Salva o contato.
test_save_contato contato_brena
# Copia o contato pelo ID.
contato_brena_copia = Contato.find(contato_brena.id)
# Verifica se os contatos são iguais.
assert_equal contato_brena, contato_brena_copia
end
def test_update_contato
# Cria o contato.
contato_brena = test_create_contato
# Modifica o facebook do contato.
contato_brena.facebook = ""
# Salva o contato.
test_save_contato contato_brena
end
def test_destroy_contato
# Cria o contato.
contato_brena = test_create_contato
# Salva o contato.
test_save_contato contato_brena
# Destrói o contato.
contato_brena.destroy
end
end
Para executar o teste rode o comando:
ruby test/unit/contato_test.rb
É importante lembrar que as alterações feitas nos testes não serão visualizadas no banco de dados. O arquivo YAML é utilizado apenas para popular o banco de teste, mas as operações de save e destroy não irão alterar as informações contidas no banco.
Saber isso é fundamental, perdi um tempo tentando entender porque as alterações não eram realizadas no banco e só após a ajuda do Rafael Ponte é que descobri o motivo pelo qual não via alterações no banco. Compartilho o link do gist que esclareceu minhas dúvidas sobre teste unitário.
Lembre-se que esta é apenas uma simples forma de começar a fazer testes nos projetos RoR.
Até breve


