better code through tdd
DESCRIPTION
The talk I gave about beTRANSCRIPT
![Page 1: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/1.jpg)
Better Code through TDD
Wolfram KriesingCTO, uxebu
@wolframkriesing
Freitag, 12. April 13
![Page 2: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/2.jpg)
http://140byt.es
Warming up: shorten please!
Freitag, 12. April 13
![Page 3: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/3.jpg)
Try it out!
Browser
node.jsFreitag, 12. April 13
![Page 4: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/4.jpg)
uxebu
100%Technology
Company- since 2008- remote team
Freitag, 12. April 13
![Page 5: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/5.jpg)
TDD using Jasmine
Freitag, 12. April 13
![Page 6: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/6.jpg)
Why TDD?
• Better tool than Debugging
• Verifies Refactoring
• Sustainable
Freitag, 12. April 13
![Page 7: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/7.jpg)
Jasmine
• JavaScript quasi standard
• For nodejs+browser (server+client)
• Built-in Spies
• Custom Matchers make awesome errors!!!
http://pivotal.github.com/jasmine/
Freitag, 12. April 13
![Page 8: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/8.jpg)
Jasmine - Matchers
Freitag, 12. April 13
![Page 9: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/9.jpg)
Jasmine - Matchers, watch out!
Freitag, 12. April 13
![Page 10: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/10.jpg)
Matchers - toContain, not
Freitag, 12. April 13
![Page 11: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/11.jpg)
Custom Matchers - toBeInstanceOf
Freitag, 12. April 13
![Page 12: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/12.jpg)
Custom Matchers - toBeInstanceOf
Freitag, 12. April 13
![Page 13: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/13.jpg)
Custom Matchers
Freitag, 12. April 13
![Page 14: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/14.jpg)
Spies
• Decoupled Testing
• Fast Tests (Removes waits, Removes timings)
• Better Architecture
• Async Testing
Freitag, 12. April 13
![Page 15: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/15.jpg)
Spies
Freitag, 12. April 13
![Page 16: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/16.jpg)
Spies
Freitag, 12. April 13
![Page 17: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/17.jpg)
Spies
Freitag, 12. April 13
![Page 18: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/18.jpg)
TDD is just the start...
Freitag, 12. April 13
![Page 19: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/19.jpg)
Our Process
Repo
Dev CI
Flowdock
All Devs
Freitag, 12. April 13
![Page 20: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/20.jpg)
CI - Continuous Integration
• All projects
• Automated Test runs (multiple browsers/devices)
• Build
• Code coverage
• On Linux!
Freitag, 12. April 13
![Page 21: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/21.jpg)
CI - Continuous Integration
http://siliconforks.com/jscoverage/
Freitag, 12. April 13
![Page 22: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/22.jpg)
CI - Continuous Integration
Freitag, 12. April 13
![Page 23: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/23.jpg)
Embedded Jasmine Test Runner
Test
ResultTest Platforms
Freitag, 12. April 13
![Page 24: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/24.jpg)
Better code?
Freitag, 12. April 13
![Page 25: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/25.jpg)
The problem
Freitag, 12. April 13
![Page 26: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/26.jpg)
S3
UploadHTML5 files to Amazon S3 (bucket)
Freitag, 12. April 13
![Page 27: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/27.jpg)
Assets
index.html
movie.js
Freitag, 12. April 13
![Page 28: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/28.jpg)
• it‘s a prototype ....... +1
• is actually async (ignored) ......... -1
• runs all uploads in parallel ........ +1
• no error handling ........ -1
• NEEDS WORK
Freitag, 12. April 13
![Page 29: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/29.jpg)
• still a prototype ....... +1
• is actually async ......... +1
• does NOT run uploads in parallel ........ -1
• partly error handling ........ 0
• NEEDS WORK
Freitag, 12. April 13
![Page 30: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/30.jpg)
Freitag, 12. April 13
![Page 31: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/31.jpg)
HTTP PUT
hard codedhidden
S3Uploader!!!!!
Freitag, 12. April 13
![Page 32: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/32.jpg)
• S3Uploader.js
• uploads from a buffer
• needs to take S3 config
Freitag, 12. April 13
![Page 33: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/33.jpg)
TDD please....
Freitag, 12. April 13
![Page 34: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/34.jpg)
Freitag, 12. April 13
![Page 35: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/35.jpg)
Freitag, 12. April 13
![Page 36: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/36.jpg)
S3Put.js
upload from filename
upload from buffer
S3Uploader.js HTTP PUT
Freitag, 12. April 13
![Page 37: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/37.jpg)
Freitag, 12. April 13
![Page 38: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/38.jpg)
S3Uploader
Freitag, 12. April 13
![Page 39: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/39.jpg)
S3Put.js
upload from filename
upload from buffer
S3Uploader.js HTTP PUT
:-(
Freitag, 12. April 13
![Page 40: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/40.jpg)
Uploader.js
S3Put.js
from filename
upload from buffer
S3Uploader.js
HTTP PUT
from buffer
Freitag, 12. April 13
![Page 41: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/41.jpg)
ClassMethods
Freitag, 12. April 13
![Page 42: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/42.jpg)
All tests green? Refactor!
Freitag, 12. April 13
![Page 43: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/43.jpg)
Freitag, 12. April 13
![Page 44: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/44.jpg)
S3Put.js
upload from buffer
S3Uploader.js
HTTP PUT
Uploader.js
from filename
from buffer
Freitag, 12. April 13
![Page 45: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/45.jpg)
S3Put.js
upload from buffer
S3Uploader.js
HTTP PUT
Uploader.js
from filename
from buffer
FileUploader.js
from filename
from buffer
Freitag, 12. April 13
![Page 46: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/46.jpg)
Looking at the big picture again ...
Freitag, 12. April 13
![Page 47: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/47.jpg)
• is actually async ......... +1
• runs all uploads in parallel ........ -1
• error handling ........ 0
• NEEDS WORK
Freitag, 12. April 13
![Page 48: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/48.jpg)
FileUploader.uploadFromFilesNames
Freitag, 12. April 13
![Page 49: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/49.jpg)
Freitag, 12. April 13
![Page 50: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/50.jpg)
• is actually async ......... +1
• runs all uploads in parallel ........ +1
• error handling ........ +1
• upload multiple files :)
New requirement
Freitag, 12. April 13
![Page 51: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/51.jpg)
Freitag, 12. April 13
![Page 52: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/52.jpg)
FileUploader.js
S3Put.js
from filename
upload from buffer
S3Uploader.js
HTTP PUT
from buffer
from filenames
Freitag, 12. April 13
![Page 53: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/53.jpg)
• Get to know what you really need
• Just as much as necessary
• It‘s a proof of concept
• Reveals the API
Prototyping
Freitag, 12. April 13
![Page 54: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/54.jpg)
• Let the architecture come by itself
• Don‘t turn off the brain
• Have clear interfaces - so you can mock them
• Use explicit names and the API modules evolve
TDD
Freitag, 12. April 13
![Page 55: Better Code through TDD](https://reader033.vdocument.in/reader033/viewer/2022051312/547ba58a5806b5cc3f8b4638/html5/thumbnails/55.jpg)
Thank you
@wolframkriesing
Wolfram Kriesing, CTOuxebu
Freitag, 12. April 13