Differences

This shows you the differences between two versions of the page.

Link to this comparison view

tutorial_crud_ruby_on_rails [2015/07/09 22:45]
xavierdenis
tutorial_crud_ruby_on_rails [2015/07/09 22:58] (current)
xavierdenis
Line 595: Line 595:
 </​code>​ </​code>​
 Código fonte 17:  Alteração no bloco destroy do arquivo rides_controler.rb. Código fonte 17:  Alteração no bloco destroy do arquivo rides_controler.rb.
 +
 +== Testes Funcionais ==
 +
 +Testes funcionais é uma categoria de testes que objetiva testar as funcionalidades de uma aplicação,​ verificando a integração entre as diversas partes que a compõe.
 +
 +
 +=== Ferramentas(Gems) do Ruby on rails para testes ===
 +
 +Nos testes funcionais executados na aplicação desenvolvida serão utilizados três ferramentas do Ruby on rails, sendo elas:
 +
 +  * Rspec: É um framework de testes para Ruby on Rails voltado para as versões 3.x e 4.x; 
 +
 +  * Capybara: É uma ferramenta para auxiliar nos testes das aplicações web simulando como um usuário real iria interagir com a aplicação;​ e
 +
 +  * Factory girl: É uma recurso que permite a rápida definição de protótipos dos modelos da aplicação para serem usados em testes.
 +
 +=== Instalação das ferramentas(Gems)===
 +
 +Para instalar as ferramentas abra o arquivo Gemfile localizado no diretório principal do projeto (\caronasnet) com um editor de texto. E insira o seguinte código no final do arquivo:
 +
 +<​code>​
 +group :​development,​ :test do
 + gem "​capybara"​
 + gem "​rspec-rails"​
 + gem "​factory_girl_rails"​
 +end
 +</​code>​
 +Código fonte 18: Código a ser inserido no arquivo Gemfile.
 +
 +Com a finalização da edição do arquivo Gemfile abra o terminal localizado no diretório do projeto e executa o seguinte comando (Figura 29) para a instalação das ferramentas(Gems):​
 +
 +  * bundle install
 +
 +
 +{{ ::​troimagem29.png?​nolink&​400 |Figura 29 – Comando bundle install.}}
 +
 +=== Gerando o diretório e base de testes ===
 +
 +O comando abaixo gera o diretório onde as especificações dos testes residirão e arquivos de configuração do Rspec (Figura 30).
 +
 +  * rails generate rspec:​install
 +
 +
 +{{ ::​troimagem30.png?​nolink&​400 |Figura 30 – Comando rails generate rspec:​install.}}
 +
 +A geração da base de testes é feita através do próximo comando, sua execução pode ser vista na figura 31.
 +
 +  * rake db:migrate RAILS_ENV=test
 +
 +
 +{{ ::​troimagem31.png?​nolink&​400 |Figura 31 – Comando rake db:migrate RAILS_ENV=test.}}
 +
 +Para  salvar os dados dos testes no banco de dados é necessário alterar o paramêtro de configuração config.use_transactional_fixtures para o valor booleano false, localizado no arquivo rails_helper.rb no subdiretório do projeto \caronasnet\spec.
 +
 +  * config.use_transactional_fixtures = false
 +
 +
 +=== Teste funcional: cadastrar oferta ===
 +
 +O primeiro teste tem como objetivo testar a funcionalidade de cadastro de novas caronas. O código 19 apresenta o teste.
 +
 +<​code>​
 +require '​rails_helper'​
 +require '​capybara/​rspec'​
 +
 +# primeira funcionalidade
 + ​RSpec.feature '​Cadastro de Oferta de  Carona'​ do
 +    ​
 +    given!(:​ride) { Ride.new( date: '​2015-04-30',​ hours: '​07:​00',​ uf_origin: '​MG',​ city_origin:​ 'Ouro Preto',​ uf_destination:​ '​MG',​ city_destination:​ '​Ipatinga',​ number_vacancies:​ '​2'​) }
 +    ​
 +    scenario '​Entrada válida de dados ' do
 + 
 +     visit rides_path
 +
 +     ​click_link '​Cadastrar Carona'​
 +
 + 
 +      fill_in ​   '​Data',​ with:  ride.date
 +      fill_in ​   '​Horário de saída',​ with:  ride.hours
 +      fill_in ​   '​Estado de origem',​ with:  ride.uf_origin ​     ​
 +      fill_in ​   '​Cidade de origem',​ with:  ride.city_origin
 +      fill_in ​   '​Estado de destino',​ with:  ride.uf_destination
 +      fill_in ​   '​Cidade de destino',​ with:  ride.city_destination ​
 +      fill_in ​   '​Numero de vagas',​ with:  ride.number_vacancies
 +      ​
 +      click_button '​Cadastrar Carona'​
 +      ​
 +      expect(page).to have_content ​ '​Aviso:​ Cadastro realizado com sucesso !'
 +      ​
 +    end
 +       
 +end
 +
 +</​code>​
 +Código fonte 19: Código de teste da funcionalidade de cadastro.
 +
 +
 +Para executar o teste iremos salvar o código de teste em um arquivo denominado ride_spec.rb no subdiretório \caronasnet\spec do projeto. O comando rspec com o prompt no diretório do projeto ​ executa o teste desenvolvido. O resultado da execução pode ser vista na figura 32.
 +
 +  * rspec
 +
 +
 +{{ ::​troimagem32.png?​nolink&​400 |Figura 32 – Comando rspec para execução do teste.}}
 +
 +=== Teste funcional: alterar oferta ===
 +O segundo teste especificado tem a finalidade de testar a funcionalidade de alteração do registro de caronas. O código 20 descreve tal teste. ​
 +
 +<​code>​
 +# segunda funcionalidade ​  
 +RSpec.feature '​Alteração dos dados da oferta de Carona ' do  ​
 +  given!(:​ride) { Ride.new(id:​ '​1',​ date: '​2015-04-30',​ hours: '​07:​00',​ uf_origin: '​MG',​ city_origin:​ 'Ouro Preto',​
 + ​uf_destination:​ '​MG',​ city_destination:​ '​Ipatinga',​ number_vacancies:​ '​1'​) }
 +  ​
 +  scenario '​Entrada de dados válida'​ do    ​
 +     visit rides_path ​   ​
 +      find("#​ride_#​{ride.id}"​).click_link '​Editar' ​          
 +
 +      fill_in ​   '​Data',​ with:  ride.date
 +      fill_in ​   '​Horário de saída', ​  ​with: ​ ride.hours
 +      fill_in ​   '​Estado de origem',​ with:  ride.uf_origin ​     ​
 +      fill_in ​   '​Cidade de origem',​ with:  ride.city_origin
 +      fill_in ​   '​Estado de destino',​ with:  ride.uf_destination
 +      fill_in ​   '​Cidade de destino',​ with:  ride.city_destination
 +      fill_in ​   '​Numero de vagas', ​ with:  ride.number_vacancies
 +      ​
 +      click_button '​Alterar carona'​
 +           
 +      expect(page).to have_content ​ '​Aviso:​ Atualizacao realizada com sucesso !'
 +              ​
 +  end  ​
 +end
 +
 +</​code>​
 +Código fonte 20: Código de teste da funcionalidade de alteração.
 +
 +Para a execução do teste acrescente o código 20 no final do arquivo ride_spec.rb. A execução do teste continua ​ por meio do comando rspec como descrito anteriormente. O resultado da execução é visualizada na figura 33. 
 +
 +{{ ::​troimagem33.png?​nolink&​400 |Figura 33 – Comando rspec para execução do teste.}}
 +
 +=== Teste funcional: visualizar oferta ===
 +
 +O terceiro teste objetiva testar a funcionalidade de visualização do registro pela página de caronas. O código 21 descreve tal teste. ​
 +
 +<​code>​
 +# Terceira funcionalidade
 +RSpec.feature '​Exibição de oferta de caronas'​ do  ​
 +
 +  given!(:​ride) { Ride.new(id:​ '​1'​)}
 +
 +  scenario '​Entrada de dados válida' ​ do
 +    ​
 +    visit rides_path
 +       
 +    find("#​ride_#​{ride.id}"​).click_link '​Visualizar'​
 +         
 +  end
 +  ​
 +end
 +</​code>​
 +
 +Para a execução do teste novamente inclua o código 21 no final do arquivo ride_spec.rb. A execução do teste continua ​ por meio do comando rspec como descrito anteriormente. O resultado da execução é visualizada na figura 34. 
 +
 +
 +{{ ::​troimagem34.png?​nolink&​400 |Figura 34 – Comando rspec para execução do teste.}}
 +
 +=== Teste funcional: excluir oferta ===
 +
 +O último teste de funcionalidade e o da exclusão de oferta. O teste é apresentada pelo código 22.
 +
 +<​code>​
 +
 +# Quarta ​ funcionalidade
 +RSpec.feature '​Exclusão dos dados da oferta de Carona ' do  ​
 +
 +  given!(:​ride) { Ride.new(id:​ '​1'​)}
 +
 +  scenario '​Entrada de dados válida'​ do   
 +
 +         visit rides_path ​      
 +
 +         ​find("#​ride_#​{ride.id}"​).click_link '​Excluir' ​                   ​
 +
 +         ​expect(page).to have_content '​Aviso:​ Exclusao realizada com sucesso !' ​            
 +
 +  end
 +  ​
 +end
 +
 +</​code>​
 +Código fonte 22: Código de teste da funcionalidade de exclusão.
 +
 +O processo de execução do teste segue de forma semelhante aos anteriores com a adição do código no final do arquivo ride_spec.rb e execução do comando rspec. O resultado da execução do teste é exibida na figura 35.  ​
 +
 +{{ ::​troimagem35.png?​nolink&​400 |Figura 35 – Comando rspec para execução do teste.}}
 +
 +== Bibliografia ==
 +
 +  - CAELUM. '''​Desenvolvimento Ágil para Web com Ruby on Rails'''​. Disponível em: <​http://​www.caelum.com.br/​apostila-ruby-on-rails/>​. Acesso em 07 de julho de 2015.
 +  - FUENTES, V. B. '''​Ruby on Rails Coloque sua aplicação web nos trilhos'''​. Casa do código, 2012. 303p.
 +  - GITHUH. GitHub, Inc . Disponível em: <​https://​github.com/>​. Acesso em 01 de julho de 2015.
 +  - PERKINS, Andrew. '''​Ruby on Rails Tutorial'''​. Disponível em: <​https://​www.youtube.com/​playlist?​list=PLAC08CE3187BC75F1>​. Acesso em 05 de julho de 2015.
 +  - STACK OVERFLOW. Stack exchange inc. Disponível em:<​http://​stackoverflow.com/>​. Acesso em 05 de julho de 2015.