by Scott Becker
h3. Intro
* Test Driven Development - What is it, why do it, what are the advantages?
* Challenges of web applications - browser quirks, asynchronous ajax, dynamic-ness of JavaScript language
* Future VMs will run JS faster, making "bigger", more processing intensive apps possible within a browser
* Traditionally web applications have most business logic running server side.
* Testing for server-side web applications has matured over the past few years
* AJAX applications have large amounts of code executing in the browser in JavaScript
* This creates a growing need for testing at the browser level, but this area is still young and not as widely practiced
h3. What do we gain?
* Stable development - iterate without fear of breaking existing features
* Easier refactoring - rewrite the guts of your app and be confident it continues to work
* Speed - stop refreshing and clicking through your app to verify things are working, thats what computers are for
* Automation - repeatable tests help you do the right thing every time, without having to think about it
h3. Getting Started
* What libraries and methodologies exist for JavaScript testing?
* A simple example - a client-side form validation library and a suite of tests for verifying it works as expected
h3. Going further
* A complex example - integration testing, scripting user stories
* Testing across multiple browsers
* Incorporating JS tests into a larger development workflow with server-side tests
* Continous integration - running tests automatically, every time you commit
by Mikeal
h2[=approaches]. Web Testing Approaches
Separating Concerns, Isolating Components
Unittesting vs Functional Testing
Full Monty (blurring the lines between unittesting and funcitonal testing)
h2[=toolsAndTech]. Tools and Technologies
Browserless tools (HTTP tools, Browser simulation, DOMless JavaScript Interpreters)
Browser tools (Watir, Selenium, Windmill)
h2[=writingTest]. Writing Windmill Tests
Starting Windmill
The Windmill IDE
Using the recorder
Adding actions and assertions
Using the Inspector
Serializing your test (Python vs JavaScript Tests)
h2[=debuggingTests]. Debugging Windmill Tests
Running tests
Debugging Failed Actions
Firebug and Firebug Lite
Using the Lookup object
h2[=runningTests]. Running Tests Continuously
Command Line Features
Hudson Plugin
Getting Windmill running in hosted environments like EC2
h2[=extra]. And now for something completely different
Dynamic testing (Windmill's eval APIs)
Testing Firefox Extensions (MozMill)
United States United States, Portland
17th–19th June 2009