Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Implementando com Rails as histórias dos Usuários Rodrigo Urubatan
Sobre Urubatan <ul><li>Trabalho com desenvolvimento desde 1997, já desenvolvi sistemas em diversas linguagens, como Delphi...
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...
Configurando o ambiente <ul><li>#rails agileweekend </li></ul><ul><li>#cd agileweekend </li></ul><ul><li>#gedit config/env...
O primeiro teste gerado <ul><li>#script/generate cucumber </li></ul><ul><li>#script/generate feature User name:string pasw...
manage_users.feature <ul><li>Feature: Manage users   In order to [goal]   [stakeholder]   wants [behaviour]      Scenario:...
user_steps.rb <ul><li>Given /^the following users:$/ do |users|   User.create!(users.hashes) end When /^I delete the (d+)(...
Testando <ul><li>#rake features </li></ul><ul><li>------ Ver testes falharem </li></ul><ul><li>#script/generate rspec_scaf...
Testando em português <ul><li>#gedit cucumber.yml </li></ul><ul><li>default: --format progress --language pt features </li...
manage_users.feature <ul><li>Característica: Gerenciar usuários   Para que seja possível gerenciar usuários   Um gerente  ...
Autenticação <ul><li>Caracteristica: Autenticação e Autorização   Para que seja possível saber quem esta operando o sistem...
Escrevendo o teste em Ruby <ul><ul><li>Vamos editar os seguintes arquivos </li></ul></ul><ul><ul><ul><li>features/support/...
gerenciar_chamados.feature <ul><li>Característica: Gerenciar chamados de suporte   Para que seja possível registrar todas ...
Arquivos modificados <ul><ul><li>app/views/layouts/application.html.erb </li></ul></ul><ul><ul><li>public/stylesheets/scaf...
 
Referências <ul><ul><li>Meu livro -  http://livro.urubatan.com.br </li></ul></ul><ul><ul><li>Meu blog -  http://www.urubat...
Upcoming SlideShare
Loading in …5
×

Implementando Com Rails As Historias Dos Usuarios

1,893 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
  • Be the first to comment

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>

×