Your SlideShare is downloading. ×
  • Like
  • Save
Implementando Com Rails As Historias Dos Usuarios
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Implementando Com Rails As Historias Dos Usuarios

  • 1,597 views
Published

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

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
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,597
On SlideShare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Implementando com Rails as histórias dos Usuários Rodrigo Urubatan
  • 2. Sobre Urubatan
    • Trabalho com desenvolvimento desde 1997, já desenvolvi sistemas em diversas linguagens, como Delphi, C, C++, PHP, ASP, ColdFusion, Assembly, Leather, Java e Ruby.
    • Atualmente trabalho com pesquisa e desenvolvimento na HP, utilizando principalmente Java, e com Ruby em outros projetos e cursos.
    • Alem de ser o autor do livro "Ruby On Rails: Desenvolvimento fácil e Rápido de aplicações web"
  • 3. Warm-Up
      • O que é BDD
      • O que é RSpec
      • O que é Cucumber
      • O que é Rails
  • 4. Configurando o ambiente
    • #rails agileweekend
    • #cd agileweekend
    • #gedit config/environment.rb
    •     config.gem "rspec", :version => "1.2.2", :lib => false   config.gem "rspec-rails", :version => "1.2.2", :lib => false   config.gem "cucumber", :lib => false   config.gem "webrat", :lib => false  
    •  
    • #sudo rake gems:install
    • - Criar application layout básico
  • 5. O primeiro teste gerado
    • #script/generate cucumber
    • #script/generate feature User name:string pasword:string email:string
    •       exists  features/step_definitions       create  features/manage_users.feature       create  features/step_definitions/user_steps.rb
  • 6. manage_users.feature
    • 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 "Name" with "name 1"     And I fill in "Pasword" with "pasword 1"     And I fill in "Email" with "email 1"     And I press "Create"     Then I should see "name 1"     And I should see "pasword 1"     And I should see "email 1"
    •   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|
  • 7. user_steps.rb
    • 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("table > tr:nth-child(#{pos.to_i+1})") do     click_link "Destroy"   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("table > tr:nth-child(#{i+2}) > td:nth-child(#{j+1})") { |td|         td.inner_text.should == cell       }     end   end end
  • 8. Testando
    • #rake features
    • ------ Ver testes falharem
    • #script/generate rspec_scaffold User name:string pasword:string email:string
    • ------ Ver testes passarem
  • 9. Testando em português
    • #gedit cucumber.yml
    • default: --format progress --language pt features
    • #gedit lib/tasks/cucumber.rake
    • --- Adicionar --language pt
    • #gedit features/step_definitions/user_steps.rb
    • #gedit features/step_definitions/webrat_steps.rb
    • #gedit features/support/paths.rb
  • 10. manage_users.feature
    • 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 "Name" com "name 1"     E eu preencho "Pasword" com "pasword 1"     E eu preencho "Email" com "email 1"     E eu presciono "Create"     Então eu devo ver "name 1"     E eu devo ver "pasword 1"     E eu devo ver "email 1"
    •   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|
  • 11. Autenticação
    • 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 "É necessário se autenticar para acessar o sistema"     E eu devo ver "Name"     E eu devo ver "Password"
    •   Cenário: Login de usuário inexistente     Dado eu estou na página de nova sessão     Quando eu preencho "Name" com "user5"     E eu preencho "Password" com "pasword7"     E eu presciono "Login"     Então eu devo ver "Usuário ou senha inválidos"     Cenário: Login de usuário existente     Dado eu estou na página de nova sessão     Quando eu preencho "Name" com "user1"     E eu preencho "Password" com "pasword1"     E eu presciono "Login"     Então eu devo ver "Usuários do sistema"     E eu devo ver "Bem vindo"     E eu devo ver "Usuário 1"
  • 12. Escrevendo o teste em Ruby
      • Vamos editar os seguintes arquivos
        • features/support/paths.rb
        • config/routes.rb
        • app/controllers/sessions_controller.rb
        • app/views/sessions/new.html.erb
        • app/controllers/application.rb
        • features/step_definitions/user_steps.rb
        • app/models/user.rb
  • 13. gerenciar_chamados.feature
    • 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;
    •     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|
    •   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|      
  • 14. Arquivos modificados
      • app/views/layouts/application.html.erb
      • public/stylesheets/scaffold.css
      • #script/generate rspec_scaffold issue title:string description:text
      • app/views/issues/new.html.erb
      •   #script/generate rspec_scaffold solution issue:references user:references type:string description:text
      • app/views/solutions/new.html.erb
      • features/step_definitions/user_steps.rb
  • 15.  
  • 16. Referências
      • Meu livro - http://livro.urubatan.com.br
      • Meu blog - http://www.urubatan.com.br
      • Ruby On Rails - http://www.rubyonrails.org
      • Ruby On Rails Brasil - http://www.rubyonrails.pro.br
      • Cucumber - http://wiki.github.com/aslakhellesoy/cucumber
      • Webrat - http://github.com/brynary/webrat/tree  
      • RubyOnBr - http://www.rubyonbr.org/