Your SlideShare is downloading. ×
Contentful Testing at Scotland on Rails 2008
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Contentful Testing at Scotland on Rails 2008

568
views

Published on

Slides from my "Contentful Testing - Regression Therapy" talk at Scotland on Rails 2008.

Slides from my "Contentful Testing - Regression Therapy" talk at Scotland on Rails 2008.

Published in: Technology

1 Comment
0 Likes
Statistics
Notes
  • Notes and other download media can be found here:

    http://anthonybailey.net/tumblelog/2008/04/08/contentful-slides-from-my-talk-at-scotland-on-etc
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
568
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
1
Likes
0
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
  • I'm going to talk today about a bunch of issues. But, the heart of the talk concerns testing the content of views generated by a Rails app. I found I had quite a lot to say; and that I’m not enough of a speaker to improbise without missing key points, so I’ve decided to work from a script. So, you can expect me to rattle through plausible sounding material whilst not looking you in the eye, and occasionally losing my place and looking around vacantly as I try to remember what it is I’m actually talking about.
  • Transcript

    • 1. Regression Therapy – Contentful Testing Anthony Bailey http://anthonybailey.net 3 April 2008, Scotland on Rails
    • 2. Teaser
      • The conventional wisdom:
      • # Assert explicitly and exactly what we care about.
      • assert_select(“divs#of_interest”, /my_desires/)
      • My dumb straw man alternative:
      • # Everything should just be exactly like yesterday.
      • assert_equals(File.new(“expected.html”).read, @response.body )
      Regression Therapy – Contentful Testing
    • 3. Setting the scene
      • I won’t try to behave.
      • When I say view content, I mean view content.
      • When I don’t, I mean everything…
      • … even other languages and frameworks.
      Regression Therapy – Contentful Testing
    • 4. Setting the scene: terminology
      • I won’t try to behave
      Regression Therapy – Contentful Testing
    • 5. Setting the scene: scope
      • When I say view content, I mean view content.
        • not the models the views display
        • not the presentation logic they use to display it
        • not the controller logic invoked by interacting with the view
        • not the workflow that the views comprise
        • just the tags
        • (at least for now)
      Regression Therapy – Contentful Testing
    • 6. Setting the scene: scope
      • When I don’t say views, I mean everything.
        • Contentful testing can work in other domains
      Regression Therapy – Contentful Testing
    • 7. Setting the scene: scope
      • Other languages and frameworks
        • Contentful testing doesn’t need Ruby or Rails,
          • used it in a C++ desktop app, a Java/Spring web app
        • But this talk will focus on a Rails plug-in:
          • http://contentful.rubyforge.org/
      Regression Therapy – Contentful Testing
    • 8. Setting the scene: personal
      • The plug-in was born of genuine need
        • but in a small, simple, CRUDdy app.
      Regression Therapy – Contentful Testing
    • 9. Why do we test?
      • To maintain known good behavior and catch accidental bad changes
      • ........................... ! .. ! ..................... ! .........
      • To drive intended changes
      • > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
      • To explore and understand emergent changes
      • ..... !!? ? ? ? ? ? ............ !!? ? ? ? ? ? ........ !!? ? ? ? ? ? .......
      Regression Therapy – Contentful Testing
    • 10. How do Rails devs test the view?
      • Functional test, plus assert_select
      Regression Therapy – Contentful Testing
    • 11. How do Rails devs test the view?
      • Decoupled unit test, plus assert_select
      Regression Therapy – Contentful Testing
    • 12. But views are not very assertive
      • Assertion tests
        • don’t help exploration
        • are great for test-driving,
          • but view content doesn’t get much value from this.
        • have selective coverage
        • are verbose when coverage needs to be high;
          • translation takes time and space
        • are expensive to update when things change
      Regression Therapy – Contentful Testing
    • 13. How much do Rails devs test the view?
      • Not much!
      • "I find that the View tests that RSpec and Zentest provide are fragile and provide dubious value. Rarely do they find bugs and often they break for unimportant reasons. I just don't find them to have a good return on investment.“ – Jay Fields, Thoughtworks.
      • err.the_blog’s groupthink thought similar
      Regression Therapy – Contentful Testing
    • 14. assert_ select Regression Therapy – Contentful Testing
    • 15. Past life regression
      • Regression tests make some things a bit better
        • Any one test is simple to express
          • “ the expected output is exactly as in this file”
        • Expected output needs no translation
          • - it’s just a straight copy
      • But they make other things much worse
        • Very expensive to maintain, because
          • each test is brittle, breaking on minor changes
          • a single production code change can break many tests
      Regression Therapy – Contentful Testing
    • 16. Regression therapy
      • One step back, two steps forward
      • Dampen the noise
        • diff the DOM, not the text - normalize
        • DRY up tested content
      • Smooth the workflow
        • easily create tests
        • conveniently inspect changes
        • quickly accept changes
        • … and these should all work well in batch
      Regression Therapy – Contentful Testing
    • 17. Contentful plug-in
      • % ruby script/plugin install svn://rubyforge.org/var/svn/contentful
      Regression Therapy – Contentful Testing
    • 18. Regression Therapy – Contentful Testing
    • 19. Regression Therapy – Contentful Testing
    • 20. Regression Therapy – Contentful Testing
    • 21. Regression Therapy – Contentful Testing
    • 22. Regression Therapy – Contentful Testing
    • 23. Regression Therapy – Contentful Testing
    • 24. Regression Therapy – Contentful Testing
    • 25. Regression Therapy – Contentful Testing
    • 26. Regression Therapy – Contentful Testing
    • 27. Regression Therapy – Contentful Testing
    • 28. Regression Therapy – Contentful Testing
    • 29. Regression Therapy – Contentful Testing
    • 30. Regression Therapy – Contentful Testing
    • 31. Regression Therapy – Contentful Testing
    • 32. Other paths to contentfulness
      • That was just one implementation
        • Really, I want to sell the contentful testing pattern more than my particular Rails plug-in
      • Capture a normalized from of entire output
      • and, automate new/test/review/accept somehow
          • others Rails devs might prefer different Rake tasks
          • other devs might want something other than Rake
          • maybe use some IDE other than the command-line
      Regression Therapy – Contentful Testing
    • 33. Pushing contentful testing
      • Leveraging the coverage/upkeep trade-off
        • I pay the tax on dense coverage to get value from serendipitous discovery of changes
      • Testing more than the view content
        • cover for exploration, spiking, and follow-on
      • Bonus value in regular assertion tests
        • If you’re assertion testing controllers anyway, an extra assert_contentful is almost free
        • I (guiltily) trade decoupling for convenience
      Regression Therapy – Contentful Testing
    • 34. An obvious contentful usecase
      • Use the machinery as a temporary testing vise
          • (term due to Michael Feathers)
        • Pin down all view content during a big refactor
          • extracting partials and helpers
          • refactoring form builders
          • changing template system
      • CONTENTFUL_AUTO = true
        • assert_contentful in every functional test
      Regression Therapy – Contentful Testing
    • 35. http://contentful.rubyforge.org Regression Therapy – Contentful Testing

    ×