#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
#prosa

DevDay 2011


Ei pessoal.

Este é mais um post de divulgação de evento que será realizado em BH.
O DevDay 2011 acontecerá no dia 27/08 na UNA Campus Aimorés e abordará assuntos como:

  • Planejamento e acompanhamento ágil com Team Foundation
  • Qualidade de codificação
  • Windows Azure
  • TDD
  • Novidades do Rails 3.1
  • Programação funcional com C#
  • Evolução do Javascript

A inscrição pode ser feita no site http://devday.devisland.com

Bom evento pra todos 😉

Padrão
#prosa

Projeto RoR nas nuvens – Parte 1


Olá pessoal.

Já tem um bom tempo que venho tentando me aprofundar nos estudos de Ruby on Rails. Neste intuito utilizei os livros: Use a cabeça: Rails e Desenvolvendo Aplicações Web com Ruby on Rails 2.3 e PostgreSQL. Confesso que não cheguei a finalizá-los, porque apesar deles serem absurdamente práticos senti a necessidade de começar um projeto “de verdade”.

Sendo assim meu propósito é desenvolver um projeto real e ir documentando através dos posts.

Pretendo utilizar neste projeto as tecnologias atuais e free:

  • Ubuntu Maverick
  • Ruby
  • Rails
  • jQuery
  • CSS3
  • HTML5
  • PostgreSQL
  • Git
  • Github
  • Heroku

Também pretendo utilizar algumas metodologias como TDD.

Por enquanto é isso, o próximo post será sobre configuração do Ruby on Rails. Já postei sobre a configuração do RoR aqui e aqui mas ocorreram algumas mudanças nestas últimas versões.

Até la 😉

Padrão