using test driven development jon kruger email: [email protected] blog: twitter: jonkruger

50
Using Test Driven Development Jon Kruger Email: [email protected] Blog: http://jonkruger.com Twitter: JonKruger Unit Testing JavaScript

Upload: steven-richard

Post on 18-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Using Test Driven Development

Jon Kruger

Email: [email protected]

Blog: http://jonkruger.com

Twitter: JonKruger

Unit Testing JavaScript

Page 2: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Explain why you should write unit testsShow you how to write unit tests for

JavaScript codeShow you Test Driven Development in

action!

Goals of this talk

Page 3: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

I thought this was a .NET user group...

Page 4: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Informal Survey

Page 5: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Tests a small unit of functionalityMust run fastIsolate external dependencies using

mocks and stubs

What is a unit test?

Page 6: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Test that runs against external dependencies (e.g. database, UI, file system)

Test that is slowWeb tests, load tests, performance tests

What is not a unit test?

Page 7: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

You will write bad codeYou (or someone else) will break your

codeSomeone else will need to understand

your codeNo compiler for JavaScriptPeace of mind

Why write unit tests?

Page 8: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Proof that your code worksFewer bugs (both now and in the future)Peace of mind

What's in it for me?

Page 9: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger
Page 10: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

1. Design Edge cases Separation of concerns

2. Verification3. Documentation4. Testable code5. When you’re “done” your done

Why Test Driven Development?

Page 11: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

The TDD Lifecycle

Get Specs (features or bugs)

Write tests

Watch ‘em fail

Write code

Watch ‘em pass

Repeat!

Page 12: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

http://PairProgrammingBot.com

Your new accountability partner

Page 13: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

?

Page 14: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

JavaScript Unit Testing FrameworksJSUnit J3UnitQUnit JSSpecYUI Test Screw-UnitJSNUnit script.aculo.us unit

testingTestCase Crosscheck

RhinoUnit jqUnitmore?

Page 15: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Official Measure of Relevance

Page 16: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Relevant JavaScript Testing Frameworks

QUnitJSSpec

YUI TestScrew-Unit

Page 17: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

JavaScript class design

Page 18: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

JavaScript class design

Page 19: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

JavaScript class design

Page 20: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

QUnit Basics

Page 21: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

QUnit basics – module()

Page 22: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

QUnit basics – test()

Page 23: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Untestable JavaScript

Page 24: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Untestable JavaScript

Test won’t run unless it’s run from a page that contains these elements.

Page 25: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Testable JavaScript

Page 26: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Untestable JavaScript

Testing this method will pop up an alert box!

Page 27: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Testable JavaScript

Page 28: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Untestable JavaScript

Unable to test asynchronous AJAX calls.

Page 29: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Testable JavaScript – synchronous AJAX

Page 30: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Testable JavaScript –stop(), start()

Page 31: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

?

Page 32: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Sample project – "MiniSudoku"

Page 33: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 1 – Stub out tests

Page 34: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 2 – Write tests

Page 35: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 2 – Write tests

Page 36: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 2 – Write tests

Page 37: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 2 – Write tests

Page 38: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 3 – Run tests (should fail)

Page 39: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 4 – Create classes

Page 40: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 4 – Create classes

Page 41: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 5 – Run tests (should fail)

Page 42: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 6 – Write actual class code

Page 43: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 7 – Passing tests!

Page 44: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 8 – Repeat!

Get Specs (features or bugs)

Write tests

Watch ‘em fail

Write code

Watch ‘em pass

Repeat!

Page 45: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Step 9 – Celebrate!

Page 46: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Need to inject UI elements into the tests

Hook it up to your .aspx page!

Page 47: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

I know that my code worksI know what my code is supposed to do - tests

are my documentation of my codeI know that my code will continue to workMy classes are well-designed Tests and good design will mean that it will

be easier to make changes to the codePeace of mind!

What do we have?

Page 48: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

Hold yourself to higher standardIf your code sucks, then stop writing sucky

code.Make quality a priority

Zero Defects

Page 49: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

?

Page 50: Using Test Driven Development Jon Kruger Email: jon@jonkruger.com Blog:  Twitter: JonKruger

QUnit home pagehttp://docs.jquery.com/QUnit

Integrating QUnit tests into a continuous integration build http://tinyurl.com/qunitbuild

MiniSudoku source codehttp://jonkruger.com/minisudoku/source.php

My bloghttp://jonkruger.com

Send me an email! [email protected]

Twitterhttp://twitter.com/jonkruger

Resources