Implementando Com Rails As Historias Dos Usuarios

1,750 views
1,696 views

Published on

Uma palestra sobre como utilizar a dupla Rails e Cucumber para implementar uma aplicação tendo as histórias dos usuários como código para os testes de aceitação da aplicação

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,750
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Implementando Com Rails As Historias Dos Usuarios

  1. 1. Implementando com Rails as histórias dos Usuários Rodrigo Urubatan
  2. 2. Sobre Urubatan <ul><li>Trabalho com desenvolvimento desde 1997, já desenvolvi sistemas em diversas linguagens, como Delphi, C, C++, PHP, ASP, ColdFusion, Assembly, Leather, Java e Ruby. </li></ul><ul><li>Atualmente trabalho com pesquisa e desenvolvimento na HP, utilizando principalmente Java, e com Ruby em outros projetos e cursos. </li></ul><ul><li>Alem de ser o autor do livro &quot;Ruby On Rails: Desenvolvimento fácil e Rápido de aplicações web&quot; </li></ul>
  3. 3. Warm-Up <ul><ul><li>O que é BDD </li></ul></ul><ul><ul><li>O que é RSpec </li></ul></ul><ul><ul><li>O que é Cucumber </li></ul></ul><ul><ul><li>O que é Rails </li></ul></ul>
  4. 4. Configurando o ambiente <ul><li>#rails agileweekend </li></ul><ul><li>#cd agileweekend </li></ul><ul><li>#gedit config/environment.rb </li></ul><ul><li>    config.gem &quot;rspec&quot;, :version => &quot;1.2.2&quot;, :lib => false   config.gem &quot;rspec-rails&quot;, :version => &quot;1.2.2&quot;, :lib => false   config.gem &quot;cucumber&quot;, :lib => false   config.gem &quot;webrat&quot;, :lib => false   </li></ul><ul><li>  </li></ul><ul><li>#sudo rake gems:install </li></ul><ul><li>- Criar application layout básico </li></ul>
  5. 5. O primeiro teste gerado <ul><li>#script/generate cucumber </li></ul><ul><li>#script/generate feature User name:string pasword:string email:string </li></ul><ul><li>      exists  features/step_definitions       create  features/manage_users.feature       create  features/step_definitions/user_steps.rb </li></ul>
  6. 6. manage_users.feature <ul><li>Feature: Manage users   In order to [goal]   [stakeholder]   wants [behaviour]     Scenario: Register new user     Given I am on the new user page     When I fill in &quot;Name&quot; with &quot;name 1&quot;     And I fill in &quot;Pasword&quot; with &quot;pasword 1&quot;     And I fill in &quot;Email&quot; with &quot;email 1&quot;     And I press &quot;Create&quot;     Then I should see &quot;name 1&quot;     And I should see &quot;pasword 1&quot;     And I should see &quot;email 1&quot; </li></ul><ul><li>  Scenario: Delete user     Given the following users:       |name|pasword|email|       |name 1|pasword 1|email 1|       |name 2|pasword 2|email 2|       |name 3|pasword 3|email 3|       |name 4|pasword 4|email 4|     When I delete the 3rd user     Then I should see the following users:       |name|pasword|email|       |name 1|pasword 1|email 1|       |name 2|pasword 2|email 2|       |name 4|pasword 4|email 4| </li></ul>
  7. 7. user_steps.rb <ul><li>Given /^the following users:$/ do |users|   User.create!(users.hashes) end When /^I delete the (d+)(?:st|nd|rd|th) user$/ do |pos|   visit users_url   within(&quot;table > tr:nth-child(#{pos.to_i+1})&quot;) do     click_link &quot;Destroy&quot;   end end Then /^I should see the following users:$/ do |users|   users.rows.each_with_index do |row, i|     row.each_with_index do |cell, j|       response.should have_selector(&quot;table > tr:nth-child(#{i+2}) > td:nth-child(#{j+1})&quot;) { |td|         td.inner_text.should == cell       }     end   end end </li></ul>
  8. 8. Testando <ul><li>#rake features </li></ul><ul><li>------ Ver testes falharem </li></ul><ul><li>#script/generate rspec_scaffold User name:string pasword:string email:string </li></ul><ul><li>------ Ver testes passarem </li></ul>
  9. 9. Testando em português <ul><li>#gedit cucumber.yml </li></ul><ul><li>default: --format progress --language pt features </li></ul><ul><li>#gedit lib/tasks/cucumber.rake </li></ul><ul><li>--- Adicionar --language pt </li></ul><ul><li>#gedit features/step_definitions/user_steps.rb </li></ul><ul><li>#gedit features/step_definitions/webrat_steps.rb </li></ul><ul><li>#gedit features/support/paths.rb </li></ul>
  10. 10. manage_users.feature <ul><li>Característica: Gerenciar usuários   Para que seja possível gerenciar usuários   Um gerente   Deseja registrar, deletar e listar usuários     Cenário: Registrar novo usuário     Dado eu estou na página de novo usuário     Quando eu preencho &quot;Name&quot; com &quot;name 1&quot;     E eu preencho &quot;Pasword&quot; com &quot;pasword 1&quot;     E eu preencho &quot;Email&quot; com &quot;email 1&quot;     E eu presciono &quot;Create&quot;     Então eu devo ver &quot;name 1&quot;     E eu devo ver &quot;pasword 1&quot;     E eu devo ver &quot;email 1&quot; </li></ul><ul><li>  Cenário: Deletar usuário     Dado os seguintes usuários:       |name|pasword|email|       |name 1|pasword 1|email 1|       |name 2|pasword 2|email 2|       |name 3|pasword 3|email 3|       |name 4|pasword 4|email 4|     Quando eu deleto o usuário número 3     Então eu devo ver os seguintes usuários:       |name|pasword|email|       |name 1|pasword 1|email 1|       |name 2|pasword 2|email 2|       |name 4|pasword 4|email 4| </li></ul>
  11. 11. Autenticação <ul><li>Caracteristica: Autenticação e Autorização   Para que seja possível saber quem esta operando o sistema   Qualquer usuário   Precisa se autenticar para acessar qualquer coisa diferente da página de login     Cenário: Tentativa de acesso de usuário não logado     Dado eu estou na página de novo usuário     Então eu devo ver &quot;É necessário se autenticar para acessar o sistema&quot;     E eu devo ver &quot;Name&quot;     E eu devo ver &quot;Password&quot; </li></ul><ul><li>  Cenário: Login de usuário inexistente     Dado eu estou na página de nova sessão     Quando eu preencho &quot;Name&quot; com &quot;user5&quot;     E eu preencho &quot;Password&quot; com &quot;pasword7&quot;     E eu presciono &quot;Login&quot;     Então eu devo ver &quot;Usuário ou senha inválidos&quot;     Cenário: Login de usuário existente     Dado eu estou na página de nova sessão     Quando eu preencho &quot;Name&quot; com &quot;user1&quot;     E eu preencho &quot;Password&quot; com &quot;pasword1&quot;     E eu presciono &quot;Login&quot;     Então eu devo ver &quot;Usuários do sistema&quot;     E eu devo ver &quot;Bem vindo&quot;     E eu devo ver &quot;Usuário 1&quot; </li></ul>
  12. 12. Escrevendo o teste em Ruby <ul><ul><li>Vamos editar os seguintes arquivos </li></ul></ul><ul><ul><ul><li>features/support/paths.rb </li></ul></ul></ul><ul><ul><ul><li>config/routes.rb </li></ul></ul></ul><ul><ul><ul><li>app/controllers/sessions_controller.rb </li></ul></ul></ul><ul><ul><ul><li>app/views/sessions/new.html.erb </li></ul></ul></ul><ul><ul><ul><li>app/controllers/application.rb </li></ul></ul></ul><ul><ul><ul><li>features/step_definitions/user_steps.rb </li></ul></ul></ul><ul><ul><ul><li>app/models/user.rb </li></ul></ul></ul>
  13. 13. gerenciar_chamados.feature <ul><li>Característica: Gerenciar chamados de suporte   Para que seja possível registrar todas as ligações de suporte   Um funcionário do help desk   Precisa cadastrar as ligações recebidas, atribuir tarefas aos colegas e marcar tarefas como concluídas     Contexto:     Dado que existe um usuário padrão     E que ele ja esta autenticado     E os seguintes usuários:       |name|password|email|       |tecnico1|Password 1|email 1|       |tecnico2|Password 2|email 2|   Esquema do Cenário: Ligação recebida     Dado eu estou na página inicial     Quando eu clico &quot;Nova Ligação&quot;     E eu preencho &quot;Título&quot; com &quot;<titulo>&quot;     E eu preencho &quot;Descrição&quot; com &quot;<descricao>&quot;     E eu presciono &quot;Criar&quot;     Então eu devo ver &quot;Ligação registrada com sucesso&quot; </li></ul><ul><li>    Exemplos:       |titulo|descricao|       |Reclamação sobre velox|O usuário informa não conseguir acessar a internet depois que a telefônica entrou em coma|       |Reclamação sobre BRT|O usuário informa não conseguir acessar a internet depois que a OI comprou a BRT| </li></ul><ul><li>  Esquema do Cenário: suporte offline     Dado eu estou na página inicial       E as seguintes ligações:       |title|description|       |Reclamação sobre velox|O usuário informa não conseguir acessar a internet depois que a telefônica entrou em coma|       |Reclamação sobre BRT|O usuário informa não conseguir acessar a internet depois que a OI comprou a BRT|   Quando eu clico &quot;Solucionar Problema&quot;     E eu seleciono &quot;<usuario>&quot; de &quot;Técnico&quot;     E eu seleciono &quot;<ligacao>&quot; de &quot;Ligações&quot;     E eu seleciono &quot;<status>&quot; de &quot;Soluções&quot;     E eu presciono &quot;Salvar&quot;     Então eu devo ver &quot;Status alterado com sucesso&quot;         Exemplos:       |usuario|ligacao|status|       |tecnico1|Reclamação sobre velox|Resolvido|       |tecnico2|Reclamação sobre BRT|Desistencia|       </li></ul>
  14. 14. Arquivos modificados <ul><ul><li>app/views/layouts/application.html.erb </li></ul></ul><ul><ul><li>public/stylesheets/scaffold.css </li></ul></ul><ul><ul><li>#script/generate rspec_scaffold issue title:string description:text </li></ul></ul><ul><ul><li>app/views/issues/new.html.erb </li></ul></ul><ul><ul><li>  #script/generate rspec_scaffold solution issue:references user:references type:string description:text </li></ul></ul><ul><ul><li>app/views/solutions/new.html.erb </li></ul></ul><ul><ul><li>features/step_definitions/user_steps.rb </li></ul></ul>
  15. 16. Referências <ul><ul><li>Meu livro - http://livro.urubatan.com.br </li></ul></ul><ul><ul><li>Meu blog - http://www.urubatan.com.br </li></ul></ul><ul><ul><li>Ruby On Rails - http://www.rubyonrails.org </li></ul></ul><ul><ul><li>Ruby On Rails Brasil - http://www.rubyonrails.pro.br </li></ul></ul><ul><ul><li>Cucumber - http://wiki.github.com/aslakhellesoy/cucumber </li></ul></ul><ul><ul><li>Webrat - http://github.com/brynary/webrat/tree   </li></ul></ul><ul><ul><li>RubyOnBr - http://www.rubyonbr.org/ </li></ul></ul>

×