• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Acceptance testing with Steak and Capybara
 

Acceptance testing with Steak and Capybara

on

  • 9,710 views

 

Statistics

Views

Total Views
9,710
Views on SlideShare
9,618
Embed Views
92

Actions

Likes
11
Downloads
51
Comments
1

4 Embeds 92

http://www.slideshare.net 89
http://www.techgig.com 1
http://duckduckgo.com 1
http://presentacion.org 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Acceptance testing with Steak and Capybara Acceptance testing with Steak and Capybara Presentation Transcript

    • El stack de testing de aceptación definitivo de moda el primer trimestre de 2010 RSpec · Steak · Capybara · RackTest · Culerity · ... madrid-rb Sergio Gil @madridrb @porras
    • ¿Por qué testing?
    • ¿Por qué testing? TDD
    • Testing = QA
    • TDD
    • TDD medio para otras prácticas
    • TDD medio para otras prácticas (ágiles)
    • TDD medio para otras prácticas (ágiles) que son el verdadero valor
    • The Simplest Thing That Could Possibly Work
    • Dejar que el diseño “emerja”
    • Refactorización Continua
    • Refactorización Continua Red / Green / Refactor
    • Integración Continua
    • Propiedad Colectiva del código
    • Releases Frecuentes
    • Despliegue Continuo
    • ¿Es posible Agile sin TDD?
    • ¿Por qué testing de aceptación?
    • Es el tipo de testing que más valor aporta
    • Porque empieza por el interfaz
    • Porque empieza por el interfaz y tu interfaz es tu producto*
    • Porque empieza por el interfaz y tu interfaz es tu producto* *http://gettingreal.37signals.com/ch09_Interface_First.php
    • Porque te ayuda a pensar realmente en la feature
    • Porque te ayuda a pensar realmente en la feature e implementar exclusivamente lo que hace falta
    • Porque te ayuda a pensar realmente en la feature e implementar exclusivamente lo que hace falta (= aporta valor)
    • Porque es menos frágil
    • Porque es menos frágil (= acoplado a la implementación)
    • Porque todo lo dicho sobre TDD y Agile es especialmente cierto con el testing de aceptación
    • ¿Y por qué no Cucumber?
    • <rant>
    • ¡He dicho que no me gusta el pepino!
    • Porque el texto plano no aporta nada si quienes escribimos y leemos somos desarrolladores (sólo una capa más a cambio de nada)
    • Porque el único producto del desarrollo del software susceptible de validación es el software (Manifiesto Ágil, minuto 1)
    • Porque el mantenimiento, reutilización y refactorización de features y steps acaba siendo muy complejo y trabajoso (que era lo que queríamos evitar)
    • </rant>
    • Steak “The minimalist acceptance testing on top of RSpec”
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • feature "Main page" do background do create_user :login => "wadus" end scenario "should show existing books" do create_book :title => "The Pragmatic Programmer" login_as "wadus" visit "/" page.should have_css(".book", :text => "The Pragmatic Programmer") end end
    • RSpec “The original Behaviour Driven Development framework for Ruby”
    • describe RSpec do it "should be cool" do RSpec.should be_cool end end
    • Capybara “DSL for interacting with a web application”
    • Ideal para testing de aceptación
    • Ideal para testing de aceptación Alto nivel
    • Ideal para testing de aceptación Alto nivel No se habla de modelos o métodos
    • Ideal para testing de aceptación Alto nivel No se habla de modelos o métodos Ni tampoco de acciones o peticiones
    • Ideal para testing de aceptación Alto nivel No se habla de modelos o métodos Ni tampoco de acciones o peticiones Sino de páginas, enlaces y formularios
    • Adaptadores
    • Adaptadores rack_test
    • Adaptadores rack_test selenium
    • Adaptadores rack_test selenium celerity/culerity
    • RackTest Selenium Culerity 0 37,5 75,0 112,5 150,0
    • API de Capybara visit "/wadus"
    • API de Capybara click_link "Add article"
    • API de Capybara click_link "Add article" click "Add article"
    • API de Capybara fill_in "Title", :with => "Wadus"
    • API de Capybara fill_in "Title", :with => "Wadus" choose "Option"
    • API de Capybara fill_in "Title", :with => "Wadus" choose "Option" check "Option"
    • API de Capybara fill_in "Title", :with => "Wadus" choose "Option" check "Option" uncheck "Option"
    • API de Capybara fill_in "Title", :with => "Wadus" choose "Option" check "Option" uncheck "Option" select "1980", :from => "Birth Year"
    • API de Capybara fill_in "Title", :with => "Wadus" choose "Option" check "Option" uncheck "Option" select "1980", :from => "Birth Year" click_button "Save"
    • API de Capybara fill_in "Title", :with => "Wadus" choose "Option" check "Option" uncheck "Option" select "1980", :from => "Birth Year" click_button "Save" click "Save"
    • API de Capybara within :css, ".article:first" do click_link "Edit" end
    • API de Capybara page.should have_content("Wadus")
    • API de Capybara page.should have_content("Wadus") page.should have_no_content("Wadus")
    • API de Capybara page.should have_content("Wadus") page.should have_no_content("Wadus") page.should have_css(".article", :text => "Wadus")
    • API de Capybara page.should have_content("Wadus") page.should have_no_content("Wadus") page.should have_css(".article", :text => "Wadus") page.should have_css(".article", :count => 3)
    • API de Capybara page.should have_content("Wadus") page.should have_no_content("Wadus") page.should have_css(".article", :text => "Wadus") page.should have_css(".article", :count => 3) page.should have_xpath("//*[@class='article']")
    • API de Capybara page.should have_css(".article", :text => "Wadus") do |article| article.should have_css(".author", :text => "@porras") article.should have_css(".links") do |links| links.should have_css("a", :href => "http://wadus.info") links.should have_css("a", :href => "http://bit.ly/wadus") end end
    • API de Capybara save_and_open_page
    • if Time.now < begins_at + 40.minutes && !me.thirsty? me.make :demo else me.show(the_code) && go_to(:bar) end
    • if Time.now < begins_at + 40.minutes && !me.thirsty? me.make :demo else me.show(the_code) && go_to(:bar) end def the_code visit "http://github.com/porras/madrid-rb-feb-2010" end
    • Otras herramientas
    • Spork Sin spork Con spork 0 3,75 7,50 11,25 15,00
    • WebMock request(:post, "www.example.com"). with(:body => "abc"). should have_been_made.once
    • Delorean it "should show latest created user" do time_travel_to(3.minutes.ago) { create_user :name => "John" } time_travel_to(5.minutes.ago) { create_user :name => "Chris" } get '/' response.should have_text("John") response.should_not have_text("Chris") end
    • Rakegrowl
    • ¿?
    • http://cukes.info/ http://github.com/aslakhellesoy/cucumber http://github.com/cavalle/steak http://rspec.info/ http://wiki.github.com/dchelimsky/rspec/ http://github.com/dchelimsky/rspec http://github.com/jnicklas/capybara http://github.com/brynary/rack-test http://seleniumhq.org/ http://code.google.com/p/selenium/ http://celerity.rubyforge.org/ http://htmlunit.sourceforge.net/ http://github.com/langalex/culerity http://github.com/bmabey/database_cleaner http://github.com/timcharper/spork http://github.com/bblimke/webmock http://github.com/bebanjo/delorean http://github.com/porras/rakegrowl
    • Gracias :)