SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Testing Legacy
Rails Applications




                  Evan ‘rabble’ Henshaw-Plath
                       Yahoo! Brickhouse
               anarchogeek.com - testingrails.com
            presentation slides - slideshare.net/rabble
Do We Have
   Legacy Already?

Yes, thousands of rails apps have been
built and deployed over the last three
years. Many of us included few or no
tests. The test-less apps still need
debugging, which should be done with
tests.
Testing == Health Food?



 “We started the tests, but
haven’t been updating them”
                         “Who has time for tests?”

“Testing means writing
 twice as much code.”
Testing == Debugging
no, really, it is
Starting
Don’t
do
it
all
at
once
Get Rake Working



brickhouse:~/code/legacy_testing rabble$ rake
(in /Users/rabble/code/legacy_testing)
/opt/local/bin/ruby -Ilib:test quot;/opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader.rbquot;
/opt/local/bin/ruby -Ilib:test quot;/opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader.rbquot;
#42000Unknown database 'legacy_testing_development'
/opt/local/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/vendor/mysql.rb:523:in `read'
/opt/local/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/vendor/mysql.rb:153:in `real_connect'
/opt/local/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/
mysql_adapter.rb:389:in `connect'
/opt/local/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/
mysql_adapter.rb:152:in `initialize'
Create your test db




mysqladmin -uroot create railsapp_test
Use Migrations

brickhouse:~/code/legacy_testing rabble$ rake db:migrate
(in /Users/rabble/code/legacy_testing)
== CreateArticles: migrating ====================
-- create_table(:articles)
   -> 0.2749s
== CreateArticles: migrated (0.2764s) =============
Try Rake Again

brickhouse:~/code/legacy_testing rabble$ rake
(in /Users/rabble/code/legacy_testing)
/opt/local/bin/ruby -Ilib:test quot;/opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader.rbquot; quot;test/unit/
article_test.rbquot;
Loaded suite /opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader
Started
.
Finished in 0.316844 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
/opt/local/bin/ruby -Ilib:test quot;/opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader.rbquot; quot;test/
functional/blog_controller_test.rbquot;
Loaded suite /opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader
Started
.
Finished in 0.243161 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
/opt/local/bin/ruby -Ilib:test quot;/opt/local/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader.rbquot;
Scaffolding is Broken
Ok
  now
 we’re
 ready
 to get
started
One Step At A Time
find a bug - write a test
refractor a method
    write a test
Treat Each
 Method
 As Box
Test One Thing




  At A Time
What Goes In?




What Comes Out?
Running Tests




      rake & directly
Running Tests
with rake


rake   test               #   Test all units and functionals
rake   test:functionals   #   Run the functional tests in test/functional
rake   test:integration   #   Run the integration tests in test/integration
rake   test:plugins       #   Run the plugin tests in vendor/plugins/**/test
rake   test:recent        #   Test recent changes
rake   test:uncommitted   #   Test changes since last checkin (svn only)
rake   test:units         #   Run the unit tests in test/unit
running tests directly
Test::Unit automatic runner.
Usage: blog_controller_test.rb [options] [-- untouched arguments]

run them all
ruby article_controller_test.rb

give it a test name
ruby article_controller_test.rb -n test_show

try regular expressions
ruby article_controller_test.rb -n /show/

get help: ruby --help
An Example
def User.find_popular(n=20)
 sql = quot;select u.*, count(j.user_id) as popularity
        from users u, talks_users j
        where u.id = j.user_id group by j.user_id
        order by popularity desc limit #{n}quot;
 return User.find_by_sql(sql)
end
An Example
 def User.find_popular(n=20)
  sql = quot;select u.*, count(j.user_id) as popularity
         from users u, talks_users j
         where u.id = j.user_id group by j.user_id
         order by popularity desc limit #{n}quot;
  return User.find_by_sql(sql)
 end

 def test_popular
  assert_nothing_raised { users = User.find_popular(2) }
  assert_equal 2, users.size, quot;find_popular should return two usersquot;
  assert users.first.popularity > users.last.popularity, quot;should sort popular usersquot;
 end

$ ruby ./test/unit/user_test -n test_popular
brickhouse:~/code/icalico/trunk/test/unit rabble$ ruby user_test.rb -n /popular/
Loaded suite user_test
Started
.
Finished in 0.290563 seconds.
Refactor
 def self.find_popular(n=20)
  return conference.attendees.find(:all,
    :select => quot;users.*, count(talks_users.user_id) as popularityquot;,
    :joins => quot;LEFT JOIN talks_users on users.id = talks_users.user_idquot;,
    :group => quot;talks_users.user_idquot;,
    :order => 'popularity',
    :limit => n
  )
end

$ ruby ./test/unit/user_test -n test_popular
brickhouse:~/code/icalico/trunk/test/unit rabble$ ruby user_test.rb -n /popular/
Loaded suite user_test
Started
F
Finished in 0.290563 seconds.
  1) Failure:
test_popular(UserTest) [user_test.rb:10]:
Exception raised:
Class: <NoMethodError>
Message: <quot;You have a nil object when you didn't expect it!nThe error occured
while evaluating nil.attendeesquot;>
---Backtrace---
/Users/rabble/code/icalico/trunk/config/../app/models/user.rb:35:in `find_popular'
user_test.rb:10:in `test_popular'
user_test.rb:10:in `test_popular'
---------------
Refactor
 def self.find_popular(n=20)
  return self.find(:all,
    :select => quot;users.*, count(talks_users.user_id) as popularityquot;,
    :conditions => [quot;users.conference_id = ? quot;, conference.id],
    :joins => quot;LEFT JOIN talks_users on users.id = talks_users.user_idquot;,
    :group => quot;talks_users.user_idquot;,
    :order => 'popularity',
    :limit => n )
end

$ ruby ./test/unit/user_test -n test_popular
brickhouse:~/code/icalico/trunk/test/unit rabble$ ruby user_test.rb -n /popular/
Loaded suite user_test
Started
.
Finished in 0.290563 seconds.
build test from logs

 ./log/development.log
 Processing ArticlesController#show
  (for 0.0.0.0 at 2006-07-20 11:28:23) [GET]
  Session ID:
  Parameters: {quot;actionquot;=>quot;showquot;, quot;idquot;=>quot;2quot;, quot;controllerquot;=>quot;articlesquot;}
  Article Load (0.002371) SELECT * FROM articles LIMIT 1
 Rendering within layouts/articles
 Rendering articles/show
  Article Columns (0.007194) SHOW FIELDS FROM articles
 Completed in 0.10423 (9 reqs/sec) |
 Rendering: 0.08501 (81%) |
 DB: 0.01022 (9%) |
 200 OK [http://test.host/articles/show/1]
the functional test
./test/functional/article_controller_test.rb
 require File.dirname(__FILE__) + '/../test_helper'
 require 'articles_controller'

 # Re-raise errors caught by the controller.
 class ArticlesController
  def rescue_action(e)
      raise e
    end
 end

 class ArticlesControllerTest &lt; Test::Unit::TestCase
  def setup
    @controller = ArticlesController.new
    @request = ActionController::TestRequest.new
    @response = ActionController::TestResponse.new
  end

  # Replace this with your real tests.
  def test_truth
   assert true
  end
 end
get the params

./log/development.log
Processing ArticlesController#show
 (for 0.0.0.0 at 2006-07-20 11:28:23) [GET]
 Session ID:
 Parameters: {quot;actionquot;=>quot;showquot;, quot;idquot;=>quot;2quot;, quot;controllerquot;=>quot;articlesquot;}
 Article Load (0.002371) SELECT * FROM articles LIMIT 1
Rendering within layouts/articles
Rendering articles/show
 Article Columns (0.007194) SHOW FIELDS FROM articles
Completed in 0.10423 (9 reqs/sec) |
Rendering: 0.08501 (81%) |
DB: 0.01022 (9%) |
200 OK [http://test.host/articles/show/1]
what to test?
1. Assert that the page action
rendered and returned successful
HTTP response code, i.e. 200.
2. Assert that the correct
template was rendered.
3. Assert that action assigns a
value to the @article variable.
4. Assert that the right @article
object was loaded.
writing the test
./test/functional/article_controller_test.rb

 def test_show
  get :show, {quot;actionquot;=>quot;showquot;, quot;idquot;=>quot;2quot;, quot;controllerquot;=>quot;articlesquot;}

  #confirm that the http response was a 200 (i.e. success)
  assert_response :success

  #confirm that the correct template was used for this action
  assert_template 'articles/show'

  #confirm that the variable @article was assigned a value
  assert assigns( :article )

  #confirm that the @article object loaded has the id we want
  assert_equal 2, assigns( :article ).id
 end
running the test

 rabble:~/code/tblog/test/functional evan$ ruby 
articles_controller_test.rb -n test_show
Loaded suite articles_controller_test
Started
F
Finished in 0.625045 seconds.

1) Failure: test_show(ArticlesControllerTest)

 [articles_controller_test.rb:27]:
 <2> expected but was <1>.

1 tests, 4 assertions, 1 failures, 0 errors
fix the bug

The old code
app/controller/articles_controller.rb:

 def show
  @article = Article.find(:first)
 end

The fix is easy, we update it so the Article.find method

app/controller/articles_controller.rb:

 def show
  @article = Article.find(params[:id])
 end
running the test

rabble:~/code/tblog/test/functional evan$ ruby 
articles_controller_test.rb -n test_show
Loaded suite articles_controller_test
Started
.
Finished in 0.426828 seconds.

1 tests, 3 assertions, 0 failures, 0 errors
test coverage
rake stats

brickhouse:~/code/icalico/trunk rabble$ rake stats
(in /Users/rabble/code/icalico/trunk)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                  | Lines |  LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Helpers               |   107 |   81 |       0|        9|     0|     7|
| Controllers           |   517 |  390 |      10 |      52 |    5|     5|
| Components            |     0|      0|       0|        0|     0|     0|
|   Functional tests    |   416 |  299 |      18 |      58 |    3|     3|
| Models                |   344 |  250 |       8|       37 |    4|     4|
|   Unit tests          |   217 |  159 |       9|       25 |    2|     4|
| Libraries             |   257 |  162 |       4|       32 |    8|     3|
|   Integration tests |       0|      0|       0|        0|     0|     0|
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                 | 1858 | 1341 |       49 |     213 |    4|     4|
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 883      Test LOC: 458    Code to Test Ratio: 1:0.5
rcov test coverage
rcov test coverage


what
needs to
be tested?
rcov test coverage


what gets
executed
when you
run tests
rcov test coverage
summary
rcov test coverage
per file reports
Heckle


more later
on this
autotest




 because sometimes our
tests can run themselves
autotest
Continuous Integration
You can go deeper
Fixtures
Ugliness

ar_fixtures
use mocks
fixture senarios
zentest
focus on the bugs
Flickr Photos
•http://flickr.com/photos/maguisso/247357791/
•http://flickr.com/photos/jurvetson/482054617/
•http://flickr.com/photos/candiedwomanire/352027/
•http://flickr.com/photos/mr_fabulous/481255392/
•http://flickr.com/photos/dharmasphere/125138024/
•http://flickr.com/photos/misshaley/450106803/
•http://flickr.com/photos/19684903@N00/317182464/
•http://flickr.com/photos/planeta/349424552/
•http://flickr.com/photos/izarbeltza/411729344/
•http://flickr.com/photos/mikedefiant/447379072/
•http://flickr.com/photos/fofurasfelinas/74553343/
•http://flickr.com/photos/thomashawk/422057690/
•http://flickr.com/photos/cesarcabrera/396501977/
•http://flickr.com/photos/thearchigeek/418967228/
•http://flickr.com/photos/thomashawk/476897084/
•http://flickr.com/photos/gini/123489837/
•http://flickr.com/photos/neilw/233087821/
•http://flickr.com/photos/good_day/450356635/
•http://flickr.com/photos/ronwired/424730482/
•http://flickr.com/photos/monster/148765721/
•http://flickr.com/photos/monkeyc/200815386/
•http://flickr.com/photos/charlesfred/243202440
•http://flickr.com/photos/dramaqueennorma/191063346/
•http://flickr.com/photos/incognita_mod/433543605/
•http://flickr.com/photos/filicudi/272592045/
•http://flickr.com/photos/martinlabar/163107859/
•http://flickr.com/photos/gaspi/6281982/
•http://flickr.com/photos/iboy_daniel/98784857/
•http://flickr.com/photos/silvia31163/199478324/
•http://flickr.com/photos/tjt195/68790873/
•http://flickr.com/photos/nidriel/103210579/
•http://flickr.com/photos/charlietakesphotos/25951293/
•http://flickr.com/photos/leia/29147578/
•http://flickr.com/photos/90361640@N00/282104656/
Get Your
Feet Wet


                                Next:
Evan ‘rabble’ Henshaw-Plath
Yahoo! Brickhouse
anarchogeek.com
                                Heckle
testingrails.com
slides: slideshare.net/rabble

Más contenido relacionado

La actualidad más candente

JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineJAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineAnup Singh
 
AngularJS Unit Test
AngularJS Unit TestAngularJS Unit Test
AngularJS Unit TestChiew Carol
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testingsgleadow
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSIntro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSJim Lynch
 
Unit testing of java script and angularjs application using Karma Jasmine Fra...
Unit testing of java script and angularjs application using Karma Jasmine Fra...Unit testing of java script and angularjs application using Karma Jasmine Fra...
Unit testing of java script and angularjs application using Karma Jasmine Fra...Samyak Bhalerao
 
How to test models using php unit testing framework?
How to test models using php unit testing framework?How to test models using php unit testing framework?
How to test models using php unit testing framework?satejsahu
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkArulalan T
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSUnit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSKnoldus Inc.
 
Interpreter RPG to Java
Interpreter RPG to JavaInterpreter RPG to Java
Interpreter RPG to Javafarerobe
 
RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG Greg.Helton
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and JasmineAngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasminefoxp2code
 
Unit Testing RPG with JUnit
Unit Testing RPG with JUnitUnit Testing RPG with JUnit
Unit Testing RPG with JUnitGreg.Helton
 
Unit Test Your Database
Unit Test Your DatabaseUnit Test Your Database
Unit Test Your DatabaseDavid Wheeler
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignVictor Rentea
 
20111018 boost and gtest
20111018 boost and gtest20111018 boost and gtest
20111018 boost and gtestWill Shen
 
Applying TDD to Legacy Code
Applying TDD to Legacy CodeApplying TDD to Legacy Code
Applying TDD to Legacy CodeAlexander Goida
 

La actualidad más candente (20)

TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineJAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & Jasmine
 
AngularJS Unit Test
AngularJS Unit TestAngularJS Unit Test
AngularJS Unit Test
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testing
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSIntro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJS
 
Unit testing of java script and angularjs application using Karma Jasmine Fra...
Unit testing of java script and angularjs application using Karma Jasmine Fra...Unit testing of java script and angularjs application using Karma Jasmine Fra...
Unit testing of java script and angularjs application using Karma Jasmine Fra...
 
How to test models using php unit testing framework?
How to test models using php unit testing framework?How to test models using php unit testing framework?
How to test models using php unit testing framework?
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-framework
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSUnit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJS
 
Interpreter RPG to Java
Interpreter RPG to JavaInterpreter RPG to Java
Interpreter RPG to Java
 
RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG
 
Unit Testing in iOS
Unit Testing in iOSUnit Testing in iOS
Unit Testing in iOS
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and JasmineAngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasmine
 
Unit Testing RPG with JUnit
Unit Testing RPG with JUnitUnit Testing RPG with JUnit
Unit Testing RPG with JUnit
 
Unit Test Your Database
Unit Test Your DatabaseUnit Test Your Database
Unit Test Your Database
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable Design
 
20111018 boost and gtest
20111018 boost and gtest20111018 boost and gtest
20111018 boost and gtest
 
Applying TDD to Legacy Code
Applying TDD to Legacy CodeApplying TDD to Legacy Code
Applying TDD to Legacy Code
 
Cursus phpunit
Cursus phpunitCursus phpunit
Cursus phpunit
 
Angular testing
Angular testingAngular testing
Angular testing
 

Similar a Testing Legacy Rails Apps

How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everythingnoelrap
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciollaAndrea Paciolla
 
Rails Testing
Rails TestingRails Testing
Rails Testingmikeblake
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 
2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD Workshop2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD WorkshopWolfram Arnold
 
Test Drive Development in Ruby On Rails
Test Drive Development in Ruby On RailsTest Drive Development in Ruby On Rails
Test Drive Development in Ruby On RailsNyros Technologies
 
Fundamental Concepts of React JS for Beginners.pdf
Fundamental Concepts of React JS for Beginners.pdfFundamental Concepts of React JS for Beginners.pdf
Fundamental Concepts of React JS for Beginners.pdfStephieJohn
 
Angular Optimization Web Performance Meetup
Angular Optimization Web Performance MeetupAngular Optimization Web Performance Meetup
Angular Optimization Web Performance MeetupDavid Barreto
 
Background Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbBackground Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbJuan Maiz
 
[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to TestZsolt Fabok
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in reactBOSC Tech Labs
 
Ruby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybaraRuby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybaraAndolasoft Inc
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Railsrstankov
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test communityKerry Buckley
 
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?Srijan Technologies
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - IntroductionVagmi Mudumbai
 

Similar a Testing Legacy Rails Apps (20)

How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
 
Rails Testing
Rails TestingRails Testing
Rails Testing
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Rspec
RspecRspec
Rspec
 
2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD Workshop2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD Workshop
 
Test Drive Development in Ruby On Rails
Test Drive Development in Ruby On RailsTest Drive Development in Ruby On Rails
Test Drive Development in Ruby On Rails
 
Fundamental Concepts of React JS for Beginners.pdf
Fundamental Concepts of React JS for Beginners.pdfFundamental Concepts of React JS for Beginners.pdf
Fundamental Concepts of React JS for Beginners.pdf
 
Angular Optimization Web Performance Meetup
Angular Optimization Web Performance MeetupAngular Optimization Web Performance Meetup
Angular Optimization Web Performance Meetup
 
Background Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRbBackground Jobs - Com BackgrounDRb
Background Jobs - Com BackgrounDRb
 
[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
Ruby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybaraRuby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybara
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
Rtt preso
Rtt presoRtt preso
Rtt preso
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
 
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
 

Más de Rabble .

CoDesign CMS.362/CMS.862 MIT Evolution of Product Design
CoDesign CMS.362/CMS.862 MIT Evolution of Product DesignCoDesign CMS.362/CMS.862 MIT Evolution of Product Design
CoDesign CMS.362/CMS.862 MIT Evolution of Product DesignRabble .
 
Building a Hacker Culture in Uruguay - OSCON 2011
Building a Hacker Culture in Uruguay - OSCON 2011Building a Hacker Culture in Uruguay - OSCON 2011
Building a Hacker Culture in Uruguay - OSCON 2011Rabble .
 
La Historia Secreta de Twitter & El Modelo de los Lean Startups
La Historia Secreta de Twitter & El Modelo de los  Lean StartupsLa Historia Secreta de Twitter & El Modelo de los  Lean Startups
La Historia Secreta de Twitter & El Modelo de los Lean StartupsRabble .
 
Ruby Culture
Ruby CultureRuby Culture
Ruby CultureRabble .
 
Finding the Middle Way of Testing
Finding the Middle Way of TestingFinding the Middle Way of Testing
Finding the Middle Way of TestingRabble .
 
Hacking Frequent Flyer Programs
Hacking Frequent Flyer ProgramsHacking Frequent Flyer Programs
Hacking Frequent Flyer ProgramsRabble .
 
Desde Software Libre Hacia Datos Abiertos
Desde Software Libre Hacia Datos AbiertosDesde Software Libre Hacia Datos Abiertos
Desde Software Libre Hacia Datos AbiertosRabble .
 
Sobre Hombros de Gigantes: Desarrollo de tecnología y la historia secreto de...
Sobre Hombros de Gigantes: Desarrollo de tecnología y  la historia secreto de...Sobre Hombros de Gigantes: Desarrollo de tecnología y  la historia secreto de...
Sobre Hombros de Gigantes: Desarrollo de tecnología y la historia secreto de...Rabble .
 
Beyond Testing: Specs and Behavior Driven Development
Beyond Testing: Specs and Behavior  Driven DevelopmentBeyond Testing: Specs and Behavior  Driven Development
Beyond Testing: Specs and Behavior Driven DevelopmentRabble .
 
Beyond REST? Building Data Services with XMPP PubSub
Beyond REST? Building Data Services with XMPP PubSubBeyond REST? Building Data Services with XMPP PubSub
Beyond REST? Building Data Services with XMPP PubSubRabble .
 
Liberating Location - Fire Eagle - Ecomm 2008
Liberating Location - Fire Eagle - Ecomm 2008Liberating Location - Fire Eagle - Ecomm 2008
Liberating Location - Fire Eagle - Ecomm 2008Rabble .
 
Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Rabble .
 
Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Rabble .
 
Phone Communities and Activism Showcase
Phone Communities and Activism ShowcasePhone Communities and Activism Showcase
Phone Communities and Activism ShowcaseRabble .
 

Más de Rabble . (14)

CoDesign CMS.362/CMS.862 MIT Evolution of Product Design
CoDesign CMS.362/CMS.862 MIT Evolution of Product DesignCoDesign CMS.362/CMS.862 MIT Evolution of Product Design
CoDesign CMS.362/CMS.862 MIT Evolution of Product Design
 
Building a Hacker Culture in Uruguay - OSCON 2011
Building a Hacker Culture in Uruguay - OSCON 2011Building a Hacker Culture in Uruguay - OSCON 2011
Building a Hacker Culture in Uruguay - OSCON 2011
 
La Historia Secreta de Twitter & El Modelo de los Lean Startups
La Historia Secreta de Twitter & El Modelo de los  Lean StartupsLa Historia Secreta de Twitter & El Modelo de los  Lean Startups
La Historia Secreta de Twitter & El Modelo de los Lean Startups
 
Ruby Culture
Ruby CultureRuby Culture
Ruby Culture
 
Finding the Middle Way of Testing
Finding the Middle Way of TestingFinding the Middle Way of Testing
Finding the Middle Way of Testing
 
Hacking Frequent Flyer Programs
Hacking Frequent Flyer ProgramsHacking Frequent Flyer Programs
Hacking Frequent Flyer Programs
 
Desde Software Libre Hacia Datos Abiertos
Desde Software Libre Hacia Datos AbiertosDesde Software Libre Hacia Datos Abiertos
Desde Software Libre Hacia Datos Abiertos
 
Sobre Hombros de Gigantes: Desarrollo de tecnología y la historia secreto de...
Sobre Hombros de Gigantes: Desarrollo de tecnología y  la historia secreto de...Sobre Hombros de Gigantes: Desarrollo de tecnología y  la historia secreto de...
Sobre Hombros de Gigantes: Desarrollo de tecnología y la historia secreto de...
 
Beyond Testing: Specs and Behavior Driven Development
Beyond Testing: Specs and Behavior  Driven DevelopmentBeyond Testing: Specs and Behavior  Driven Development
Beyond Testing: Specs and Behavior Driven Development
 
Beyond REST? Building Data Services with XMPP PubSub
Beyond REST? Building Data Services with XMPP PubSubBeyond REST? Building Data Services with XMPP PubSub
Beyond REST? Building Data Services with XMPP PubSub
 
Liberating Location - Fire Eagle - Ecomm 2008
Liberating Location - Fire Eagle - Ecomm 2008Liberating Location - Fire Eagle - Ecomm 2008
Liberating Location - Fire Eagle - Ecomm 2008
 
Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007
 
Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007Introduction to Active Record - Silicon Valley Ruby Conference 2007
Introduction to Active Record - Silicon Valley Ruby Conference 2007
 
Phone Communities and Activism Showcase
Phone Communities and Activism ShowcasePhone Communities and Activism Showcase
Phone Communities and Activism Showcase
 

Último

Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 

Testing Legacy Rails Apps