Vamos começar a segunda parte, que será o carregamento dos dados. Iniciaremos mais
uma vez por nossos testes, então a primeira coisa a fazer é criar o arquivo reading_products_spec.rb
na pasta de features (spec/features/products/reading_products_spec.rb
.
Acessando a página
Iniciaremos nosso teste com um cenário onde estaremos navegando até a página, então vamos ao trabalho. Implemente a navegação a página de listagem:
1 2 3 4 5 6 7 8 9 10 |
|
Organizando a navegação
Vamos adicionar um link para a pagina de listagem. No partial que contém os links
de navegação (app/views/layouts/_navigation_links.html.erb
) substitua todo o conteúdo por:
1
|
|
Rode o teste com o comando rspec spec/features/products/reading_products_spec.rb
,
teremos um erro, pois ainda não criamos nossa ação index em nosso controlador de
produtos:
1 2 3 4 5 6 |
|
A resolução desse erro é, criar uma ação index no nosso controlador:
1 2 3 4 5 6 7 8 |
|
Rodar os testes novamente irá retornar um erro devido a falta do template para essa ação:
1 2 3 4 5 6 |
|
Crie o template app/views/products/index.html.erb
, com o conteudo:
1
|
|
Rode o teste novamente e ele irá passar.
Carregando os dados
Na página criada vamos carregar os dados. Crie um bloco before, onde estarão os trechos de testes que se repetirão. O before já foi utilizado no post anterior, mas somente para lembrar…. o bloco before deve ser usado sempre que se precisa que algo seja carregado antes dos testes, assim como é o nosso caso:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Agora vamos implementar nosso cenário de carregamento dos dados. Vamos verificar se a nossa listagem possui ao menos um registro. Para isso vamos carregar nossa factory e então verificar se há ao menos um registro:
1 2 3 4 5 6 7 8 |
|
Aqui entra o FactoryGirl, que para quem não conhece é uma gem para facilitar a criação de fixtures e factories, evitando o uso direto do Active Record. Vamos usar para gerar uma lista de 25 produtos, assim testando a exibição.
Primeiro vamos adiocionar a gem ao projeto, então em seu arquivo Gemfile
, abaixo das demais gem’s do grupo
de development e test, adicione, salve e em seguida rode o comando bundle install
:
1 2 3 |
|
Instalada a gem, crie a factory para produtos. No diretorio spec
crie uma pasta
chamada factories
e nela um arquivo com nomeado products.rb
. Essa factory
vai mapear o modelo Product, assim tudo que é referente a manipulação de modelos
em nossos testes, serão de responsabilidade de nossa factory. Adicione os campos
necessários para nosso teste:
1 2 3 4 5 6 |
|
Perceba o uso do sequence
na factory, ele está é usado para nunca termos nomes
iguais. Veja mais sobre o Factory Girl aqui: site
Nosso teste se executado nesse ponto, estará quebrado, pois estamos esperando um valor que ainda não está sendo apresentado na nossa página. Abaixo vamos implementar a exibição dos resultados.
Adicione na acao index do controlador o seguinte código, que carregará os dados cadastrados:
1 2 3 4 5 6 7 8 |
|
e o nosso template index ficara assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Rode o teste rspec spec/features/reading_products_spec.rb
e nossa listagem deverá funcionar.
Caso quira inicie o server rails (rails s
) e veja o resultado.
Ultímos ajustes
Primeiramente rode todos os testes, para garantir que tudo está funcionando ou achar ocasionais
quebras. Execute o comando rspec
e bingo, temos uma quebra. Ela ocorre devida a
modificação do nosso arquivo de navegação, onde removemos o link para o formulário de
cadastro. Para solucionar isso devemos mudar a forma como o Capybara navegava até o formulário
e principalmente definir um link na página de listagem.
Na spec de cadastro (spec/features/creating_products_spec.rb
) altere o bloco before
para a navegação desejada:
1 2 3 4 5 |
|
Ao rodar o nosso teste, ainda permanece o mesmo erro, sendo a solução adicionar esse link
em nosso template index (app/views/products/index.html.erb
). Então a baixo da tag de
fechamento da tabela adicione o link:
1 2 3 4 5 6 7 |
|
Agora todos os testes estão verdes. Para finalizar vamos adicionar um teste para quando não houver dados a serem retornados. Ao teste de carregamento adicione o cenário:
1 2 3 4 |
|
E ao nosso template basta colocar a validação para quando a listagem estiver vazia. Nosso template será dessa forma:
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 |
|
Agora sim chegamos ao final. Desenvolvemos o carregamento dos dados cadastrados usando testes, com Cabybara, Rspec e FactoryGirl. No próximo post vamos ver como alterar nossos registros e como excluí-los. O código fonte desse post está no meu github, sendo separado por branches.