#desenvolvimento, #projetos

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 😉

Anúncios
Padrão

Um comentário sobre “Criando testes unitários com Ruby on Rails

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s