extending your tdd cycle into javascriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 wednesday,...
TRANSCRIPT
![Page 1: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/1.jpg)
Gregory Moeck
Extending Your TDD Cycle Into JavaScript
@gregmoeck
Wednesday, May 16, 12
![Page 2: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/2.jpg)
Quick Poll
Wednesday, May 16, 12
![Page 3: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/3.jpg)
Question1
Wednesday, May 16, 12
![Page 4: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/4.jpg)
Practice TDD/BDD In Ruby/Rails
Wednesday, May 16, 12
![Page 5: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/5.jpg)
Question2
Wednesday, May 16, 12
![Page 6: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/6.jpg)
Practice TDD/BDD In JavaScript
Wednesday, May 16, 12
![Page 7: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/7.jpg)
Why The Difference?
Wednesday, May 16, 12
![Page 8: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/8.jpg)
Why Can’t I Test My JS?
Wednesday, May 16, 12
![Page 9: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/9.jpg)
“All Of The Pain That We Feel When Writing Unit Tests
Points At Underlying Design Problems.
Michael Feathers, The Deep Synergy Between Good
Design and TestabilityWednesday, May 16, 12
![Page 10: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/10.jpg)
“ In Test First Development, When We Feel Pain, We
Change Our Tests. In Test Driven Development When We Feel Pain, We Change
Our Architecture
Corey Haines, Fast Rails Tests
Wednesday, May 16, 12
![Page 11: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/11.jpg)
Story Time
Wednesday, May 16, 12
![Page 12: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/12.jpg)
Imagine A Newbie Has Heard About The
“Wonders” Of TDD, And Comes To You With A
Question:
Wednesday, May 16, 12
![Page 13: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/13.jpg)
How Would I Test This?
Wednesday, May 16, 12
![Page 14: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/14.jpg)
<?php...<div id= “vault_items”> ... $query1 = "SELECT * FROM storage_access_vault_items WHERE access_id = {$_GET[pid]}"; $result1 = mysql_query($query1); $inner_vault_items = array(); while($this_item = mysql_fetch_assoc($result1)) { ?> <div class= “vault_item”> <?= $this_item[‘description’] ?> ... </div><?php } ...</div>?>
Wednesday, May 16, 12
![Page 15: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/15.jpg)
Summary
Wednesday, May 16, 12
![Page 16: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/16.jpg)
Writing Code Is Easy
Wednesday, May 16, 12
![Page 17: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/17.jpg)
Testing Well Architected
Code Is EasyWednesday, May 16, 12
![Page 18: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/18.jpg)
Architecting Code Well Is
HARD!!!!Wednesday, May 16, 12
![Page 19: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/19.jpg)
Architectural Patterns To Help Testing
Wednesday, May 16, 12
![Page 20: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/20.jpg)
Ports &
AdaptersWednesday, May 16, 12
![Page 21: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/21.jpg)
ApplicationDomain
Adapter
Port
Adapter
Port
Adapter
Port
Adapter
Port
Wednesday, May 16, 12
![Page 22: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/22.jpg)
Key Idea:Isolate
Application Domain
Wednesday, May 16, 12
![Page 23: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/23.jpg)
What Is A Port?
Wednesday, May 16, 12
![Page 24: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/24.jpg)
An Interface To Technical
InfrastructureWednesday, May 16, 12
![Page 25: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/25.jpg)
Examples:
Wednesday, May 16, 12
![Page 26: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/26.jpg)
Examples:DOM
Wednesday, May 16, 12
![Page 27: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/27.jpg)
Examples:DOM
XMLHTTPRequest
Wednesday, May 16, 12
![Page 28: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/28.jpg)
Examples:DOM
XMLHTTPRequest
WEBDB
Wednesday, May 16, 12
![Page 29: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/29.jpg)
Examples:DOM
XMLHTTPRequest
WEBDB
Websockets
Wednesday, May 16, 12
![Page 30: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/30.jpg)
Examples:DOM
XMLHTTPRequest
WEBDB
Websockets
IndexedDB
Wednesday, May 16, 12
![Page 31: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/31.jpg)
Examples:DOM
XMLHTTPRequest
WEBDB
Websockets
IndexedDB
LocalStorage
Wednesday, May 16, 12
![Page 32: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/32.jpg)
Examples:DOM
XMLHTTPRequest
WEBDB
Websockets
IndexedDB
LocalStorage
Etc...
Wednesday, May 16, 12
![Page 33: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/33.jpg)
What Is An Adapter?
Wednesday, May 16, 12
![Page 34: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/34.jpg)
An Interface To Translate Domain Into
TechnicalWednesday, May 16, 12
![Page 35: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/35.jpg)
Example:
DOMBoard
Renderer
renderBoard(numberOfRows, numberOfColumns)
markCell(row, column, marker)
Wednesday, May 16, 12
![Page 36: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/36.jpg)
Why Is This Useful?
Wednesday, May 16, 12
![Page 37: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/37.jpg)
Isolates From
Technical Concerns
Wednesday, May 16, 12
![Page 38: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/38.jpg)
No Browser Dependency
Wednesday, May 16, 12
![Page 39: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/39.jpg)
Side Note:
Wednesday, May 16, 12
![Page 40: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/40.jpg)
Wednesday, May 16, 12
![Page 41: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/41.jpg)
Unit Tests
Wednesday, May 16, 12
![Page 42: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/42.jpg)
Unit Tests
Wednesday, May 16, 12
![Page 43: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/43.jpg)
Unit Tests Node
Wednesday, May 16, 12
![Page 44: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/44.jpg)
Unit Tests NodeIntegration
Tests
Wednesday, May 16, 12
![Page 45: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/45.jpg)
Unit Tests NodeIntegration
Tests
Wednesday, May 16, 12
![Page 46: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/46.jpg)
Unit Tests NodeIntegration
Tests Browser
Wednesday, May 16, 12
![Page 47: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/47.jpg)
Unit Tests NodeIntegration
Tests Browser
Acceptance Tests
Wednesday, May 16, 12
![Page 48: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/48.jpg)
Unit Tests NodeIntegration
Tests Browser
Acceptance Tests
Wednesday, May 16, 12
![Page 49: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/49.jpg)
Unit Tests NodeIntegration
Tests Browser
Acceptance Tests Webdriver
Wednesday, May 16, 12
![Page 50: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/50.jpg)
Manage Your
Objects Peers
Wednesday, May 16, 12
![Page 51: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/51.jpg)
Three Types Of Peers
Wednesday, May 16, 12
![Page 52: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/52.jpg)
Dependencies
Wednesday, May 16, 12
![Page 53: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/53.jpg)
Service The Object
NEEDS To Do Its Job
Wednesday, May 16, 12
![Page 54: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/54.jpg)
Example:
PlayerPieces
Tracker
markCell(row, column, marker)
BoardView
Wednesday, May 16, 12
![Page 55: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/55.jpg)
Should Pass Dependency
Into The Constructor
Wednesday, May 16, 12
![Page 56: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/56.jpg)
Notifications
Wednesday, May 16, 12
![Page 57: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/57.jpg)
Peers That Need To Be Kept Up To
DateWednesday, May 16, 12
![Page 58: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/58.jpg)
Example:
Turn Tracker
newPlayersTurn(player)
TurnTrackerListener
Wednesday, May 16, 12
![Page 59: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/59.jpg)
Dynamically Add
Listeners At Run Time
Wednesday, May 16, 12
![Page 60: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/60.jpg)
Adjustments / Strategies
Wednesday, May 16, 12
![Page 61: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/61.jpg)
Example:
EventDispatcher
receiveCell(cell)
CurrentPlayer
Wednesday, May 16, 12
![Page 62: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/62.jpg)
Behavior Needs To Be Changeable At Runtime
Wednesday, May 16, 12
![Page 63: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/63.jpg)
Structural Example
Wednesday, May 16, 12
![Page 64: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/64.jpg)
XO
OO
XX X
Tic-Tac-Toe
Wednesday, May 16, 12
![Page 65: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/65.jpg)
Emergent Design, So
Not Perfectly Architected
Wednesday, May 16, 12
![Page 66: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/66.jpg)
Https://github.com/gmoeck/tic-tac-toe
Wednesday, May 16, 12
![Page 67: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/67.jpg)
Basic Tooling
Wednesday, May 16, 12
![Page 68: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/68.jpg)
CONFIG = ENV['CONFIG'] || 'Debug'
require 'rack'
namespace :test do
desc "Run all acceptance tests"
task :acceptance do
system("rspec spec/acceptance/end_to_end.rb --color")
end
desc "Run all unit tests"
task :unit do
system("node node_modules/jasmine-node/lib/jasmine-node/cli.js spec/unit --color")
end
desc "Run all integration tests"
task :integration do
File.delete("spec/integration/runner/all_tests.js") if File.file?("spec/integration/runner/all_tests.js")
File.open("spec/integration/runner/all_tests.js", 'w') do |f|
Dir.glob("spec/integration/*_spec.js").each do |file_name|
file_name = file_name.slice(/[a-zA-z]*_spec/)
f.write("require('#{file_name}');\n")
end
end
system("./bin/build_integration_tests.js")
system("open spec/integration/runner/runner.html")
end
task :all => [:unit, :acceptance]
end
desc "Debug the application"
task :debug do
system("./bin/build_application.js")
sleep 1
system("open public/index.html")
end
desc "Run a server for prototyping"
task :server do
Rack::Handler::Thin.run Rack::Directory.new(File.expand_path('public')), :Port => 3000
end
Wednesday, May 16, 12
![Page 69: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/69.jpg)
Summary:
Wednesday, May 16, 12
![Page 70: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/70.jpg)
Summary:Uses Modulr For Package Dependencies
Wednesday, May 16, 12
![Page 71: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/71.jpg)
Summary:Rake Test:[unit,integration,acceptance]
Uses Modulr For Package Dependencies
Wednesday, May 16, 12
![Page 72: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/72.jpg)
Summary:Rake Test:[unit,integration,acceptance]
Rake Debug
Uses Modulr For Package Dependencies
Wednesday, May 16, 12
![Page 73: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/73.jpg)
First End-To-End
TestWednesday, May 16, 12
![Page 74: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/74.jpg)
describe "end to end acceptance test", :type => :request do before(:each) do @application = TicTacToeApplicationDriver.new @application.start end
it "marks the board" do @application.mark_board(1,1) @application.shows_board( [ [' ',' ',' '], [' ','X',' '], [' ',' ',' '] ] ) endend
Wednesday, May 16, 12
![Page 75: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/75.jpg)
class TicTacToeApplicationDriver include Capybara::DSL include Capybara::RSpecMatchers APPLICATION_PORT = 1234 def initialize @application_server = ApplicationServer.new end def start @application_server.start visit "http://localhost:#{APPLICATION_PORT}/index.html" end def mark_board(x,y) cell_at(x,y).click end def shows_board(board) board.each_index do |row| board[row].each_index do |column| if board[row][column] != ' ' cell_at(column, row).text.should == board[row][column] end end end end
private def cell_at(x,y) find("[data-board-x='#{x}'][data-board-y='#{y}']") endend
Wednesday, May 16, 12
![Page 76: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/76.jpg)
Failure/Error: @application.mark_board(0,0)
Capybara::ElementNotFound:
Unable to find css "[data-board-x='0'][data-board-y='0']"
Wednesday, May 16, 12
![Page 77: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/77.jpg)
rake test:acceptanceFailure/Error: @application.mark_board(0,0)
Capybara::ElementNotFound:
Unable to find css "[data-board-x='0'][data-board-y='0']"
Wednesday, May 16, 12
![Page 78: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/78.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); boardView.renderBoard(3,3);});
Wednesday, May 16, 12
![Page 79: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/79.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); boardView.renderBoard(3,3);});
Wednesday, May 16, 12
![Page 80: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/80.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); boardView.renderBoard(3,3);});
main.js
Wednesday, May 16, 12
![Page 81: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/81.jpg)
var DOMBoardView = require('ui/dom_board_view').DOMBoardView;
describe('DOMBoardView', function() { var view; beforeEach(function() { view = new BoardView(); view.renderBoard(3,3); });
afterEach(function() { view.remove(); });
it('renders the proper number of cells', function() { expect(document.querySelectorAll('[data-board-x][data-board-y]').length).toBe(9); }); });
Wednesday, May 16, 12
![Page 82: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/82.jpg)
var DOMBoardView = require('ui/dom_board_view').DOMBoardView;
describe('DOMBoardView', function() { var view; beforeEach(function() { view = new BoardView(); view.renderBoard(3,3); });
afterEach(function() { view.remove(); });
it('renders the proper number of cells', function() { expect(document.querySelectorAll('[data-board-x][data-board-y]').length).toBe(9); }); });
spec/integration/dom_board_view_spec.js
Wednesday, May 16, 12
![Page 83: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/83.jpg)
Failure
Wednesday, May 16, 12
![Page 84: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/84.jpg)
rake test:integration
Failure
Wednesday, May 16, 12
![Page 85: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/85.jpg)
var DOMBoardView = function() {};
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); document.body.appendChild(cell); } } }};
Wednesday, May 16, 12
![Page 86: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/86.jpg)
var DOMBoardView = function() {};
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); document.body.appendChild(cell); } } }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 87: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/87.jpg)
Passed
Wednesday, May 16, 12
![Page 88: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/88.jpg)
rake test:integration
Passed
Wednesday, May 16, 12
![Page 89: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/89.jpg)
Failure/Error: @application.shows_board(
expected: "X"
got: "" (using ==)
Wednesday, May 16, 12
![Page 90: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/90.jpg)
rake test:acceptance Failure/Error: @application.shows_board(
expected: "X"
got: "" (using ==)
Wednesday, May 16, 12
![Page 91: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/91.jpg)
var DOMBoardView = require('ui/dom_board_view').DOMBoardView;var fireEvent = require('./test_helpers').fireEvent;
describe('DOMBoardView', function() { ... describe('when clicking on a cell', function() { it('marks the cell with "X" when clicked', function() { fireEvent(document.querySelector('[data-board-x="1"][data-board-y="1"]'), 'click');
expect(document.querySelector('[data-board-x="1"][data-board-y="1"]').innerText).toEqual('X'); }); });});
Wednesday, May 16, 12
![Page 92: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/92.jpg)
var DOMBoardView = require('ui/dom_board_view').DOMBoardView;var fireEvent = require('./test_helpers').fireEvent;
describe('DOMBoardView', function() { ... describe('when clicking on a cell', function() { it('marks the cell with "X" when clicked', function() { fireEvent(document.querySelector('[data-board-x="1"][data-board-y="1"]'), 'click');
expect(document.querySelector('[data-board-x="1"][data-board-y="1"]').innerText).toEqual('X'); }); });});
spec/integration/dom_board_view_spec.js
Wednesday, May 16, 12
![Page 93: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/93.jpg)
Failure
Wednesday, May 16, 12
![Page 94: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/94.jpg)
rake test:integration
Failure
Wednesday, May 16, 12
![Page 95: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/95.jpg)
var DOMBoardView = function() {};
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); document.body.appendChild(cell); } } }};
Wednesday, May 16, 12
![Page 96: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/96.jpg)
var DOMBoardView = function() {};
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); document.body.appendChild(cell); } } }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 97: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/97.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
Wednesday, May 16, 12
![Page 98: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/98.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 99: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/99.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
Wednesday, May 16, 12
![Page 100: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/100.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 101: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/101.jpg)
Passed
Wednesday, May 16, 12
![Page 102: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/102.jpg)
rake test:integration
Passed
Wednesday, May 16, 12
![Page 103: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/103.jpg)
Passed
Wednesday, May 16, 12
![Page 104: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/104.jpg)
rake test:acceptance
Passed
Wednesday, May 16, 12
![Page 105: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/105.jpg)
Refactor To Add Style In Rendering
Wednesday, May 16, 12
![Page 106: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/106.jpg)
...
Wednesday, May 16, 12
![Page 107: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/107.jpg)
Refactor To Be True Adapter
Wednesday, May 16, 12
![Page 108: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/108.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
Wednesday, May 16, 12
![Page 109: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/109.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 110: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/110.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
Wednesday, May 16, 12
![Page 111: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/111.jpg)
DOMBoardView.prototype = { renderBoard: function(rows, columns) { for(var i = 0; i < rows; i++) { for(var j = 0; j < columns; i++) { var cell = document.createElement('div'); cell.setAttribute('data-board-x', j); cell.setAttribute('data-board-y', i); cell.addEventListener('click', this._cellClicked.bind(this, i, j)); document.body.appendChild(cell); } } }, _cellClicked: function(row, column) { var cell = document.querySelector( '[data-board-x="' + column + '"]' + '[data-board-y="' + row + '"]'); cell.innerText = 'X'; }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 112: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/112.jpg)
describe('DOMBoardView', function() { ... describe('when clicking on a cell', function() { it('marks the cell with "X" when clicked', function() { var listener = { cellSelected: jasmine.createSpy('listener#cellSelected') }; view.addListener('cellSelected', listener);
fireEvent(document.querySelector('[data-board-x="1"][data-board-y="1"]'), 'click');
expect(listener.cellSelected).toHaveBeenCalledWith({ row: 1, column: 1 }); }); });});
Wednesday, May 16, 12
![Page 113: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/113.jpg)
describe('DOMBoardView', function() { ... describe('when clicking on a cell', function() { it('marks the cell with "X" when clicked', function() { var listener = { cellSelected: jasmine.createSpy('listener#cellSelected') }; view.addListener('cellSelected', listener);
fireEvent(document.querySelector('[data-board-x="1"][data-board-y="1"]'), 'click');
expect(listener.cellSelected).toHaveBeenCalledWith({ row: 1, column: 1 }); }); });});
spec/integration/dom_board_view_spec.js
Wednesday, May 16, 12
![Page 114: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/114.jpg)
Failure
Wednesday, May 16, 12
![Page 115: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/115.jpg)
rake test:integration
Failure
Wednesday, May 16, 12
![Page 116: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/116.jpg)
DOMBoardView.prototype = { ... addListener: function(event, listener) { this._listener = listener; },
_cellClicked: function(row, column) { this._listener.cellSelected(row, column); }};
Wednesday, May 16, 12
![Page 117: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/117.jpg)
DOMBoardView.prototype = { ... addListener: function(event, listener) { this._listener = listener; },
_cellClicked: function(row, column) { this._listener.cellSelected(row, column); }};
src/ui/dom_board_view.js
Wednesday, May 16, 12
![Page 118: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/118.jpg)
Failure/Error: @application.shows_board(
expected: "X"
got: "" (using ==)
Wednesday, May 16, 12
![Page 119: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/119.jpg)
rake test:acceptance Failure/Error: @application.shows_board(
expected: "X"
got: "" (using ==)
Wednesday, May 16, 12
![Page 120: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/120.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var eventHandler = { cellSelected: function(row, column) { boardView.markCell(row, column, ‘X’); } }; boardView.addListener(‘cellSelected’, eventHandler); boardView.renderBoard(3,3);});
Wednesday, May 16, 12
![Page 121: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/121.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var eventHandler = { cellSelected: function(row, column) { boardView.markCell(row, column, ‘X’); } }; boardView.addListener(‘cellSelected’, eventHandler); boardView.renderBoard(3,3);});
Wednesday, May 16, 12
![Page 122: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/122.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var eventHandler = { cellSelected: function(row, column) { boardView.markCell(row, column, ‘X’); } }; boardView.addListener(‘cellSelected’, eventHandler); boardView.renderBoard(3,3);});
main.js
Wednesday, May 16, 12
![Page 123: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/123.jpg)
Passed
Wednesday, May 16, 12
![Page 124: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/124.jpg)
rake test:acceptance
Passed
Wednesday, May 16, 12
![Page 125: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/125.jpg)
DOMBoardView
Main
cellSelected
DO
MBo
ardV
iewLis
tene
r
markCell
Wednesday, May 16, 12
![Page 126: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/126.jpg)
Mark Multiple
CellsWednesday, May 16, 12
![Page 127: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/127.jpg)
DOMBoardView
Main
cellSelected
DO
MBo
ardV
iewLis
tene
r
markCell
TurnTracker
newPlayersTurn
TurnTrackerListener
Wednesday, May 16, 12
![Page 128: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/128.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;var TurnTracker = require('./turn_tracker').TurnTracker;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var turnTracker = new TurnTracker(‘X’, ‘O’); var eventHandler = { cellSelected: function(row, column) { boardView.markCell(row, column, ‘X’); turnTracker.playerOwnsNewCell({row: row, column: column}); } }; turnTracker.addListener(‘newPlayersTurn’, eventHandler); boardView.addListener(‘cellSelected’, eventHandler);
turnTracker.startNewGame(); boardView.renderBoard(3,3);});
Wednesday, May 16, 12
![Page 129: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/129.jpg)
var DOMBoardView = require('./ui/dom_board_view').DOMBoardView;var TurnTracker = require('./turn_tracker').TurnTracker;
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var turnTracker = new TurnTracker(‘X’, ‘O’); var eventHandler = { cellSelected: function(row, column) { boardView.markCell(row, column, ‘X’); turnTracker.playerOwnsNewCell({row: row, column: column}); } }; turnTracker.addListener(‘newPlayersTurn’, eventHandler); boardView.addListener(‘cellSelected’, eventHandler);
turnTracker.startNewGame(); boardView.renderBoard(3,3);});
main.js
Wednesday, May 16, 12
![Page 130: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/130.jpg)
var TurnTracker = require('../../src/turn_tracker').TurnTracker;
describe('TurnTracker', function() { it('notifies its listeners that it is the first players turn when told to start a new game', function() { var player1 = {player: 1}, player2 = {player:2}; var turnTracker = new TurnTracker(player1, player2); var listener = { newPlayersTurn: jasmine.createSpy(‘listener#newPlayersTurn’) }; turnTracker.addListener(‘newPlayersTurn’, listener); turnTracker.startNewGame();
expect(listener.newPlayersTurn).toHaveBeenCalledWith( player1);
});});
Wednesday, May 16, 12
![Page 131: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/131.jpg)
var TurnTracker = require('../../src/turn_tracker').TurnTracker;
describe('TurnTracker', function() { it('notifies its listeners that it is the first players turn when told to start a new game', function() { var player1 = {player: 1}, player2 = {player:2}; var turnTracker = new TurnTracker(player1, player2); var listener = { newPlayersTurn: jasmine.createSpy(‘listener#newPlayersTurn’) }; turnTracker.addListener(‘newPlayersTurn’, listener); turnTracker.startNewGame();
expect(listener.newPlayersTurn).toHaveBeenCalledWith( player1);
});});
spec/unit/turn_tracker_spec.js
Wednesday, May 16, 12
![Page 132: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/132.jpg)
Failure
Wednesday, May 16, 12
![Page 133: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/133.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 134: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/134.jpg)
var TurnTracker = function(player1, player2) { this._player1 = player1; this._player2 = player2;};
TurnTracker.prototype = { addListener: function(event, listener) { this._listener = listener; },
startNewGame: function() { this._listener.newPlayersTurn(player1); }};
Wednesday, May 16, 12
![Page 135: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/135.jpg)
var TurnTracker = function(player1, player2) { this._player1 = player1; this._player2 = player2;};
TurnTracker.prototype = { addListener: function(event, listener) { this._listener = listener; },
startNewGame: function() { this._listener.newPlayersTurn(player1); }};
src/turn_tracker.js
Wednesday, May 16, 12
![Page 136: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/136.jpg)
Passed
Wednesday, May 16, 12
![Page 137: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/137.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 138: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/138.jpg)
Duplicate Code For
EventsWednesday, May 16, 12
![Page 139: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/139.jpg)
var Announce = require('../../src/util/announcer').Announcer;
describe('Announcer', function() { var announcer, listener; beforeEach(function() { announcer = new Announcer(); listener = { someEvent: jasmine.createSpy('listener#someEvent') }; });
it('notifies its listeners when an event they are registered for happens', function() { announcer.addListener('someEvent', listener);
announcer.announce('someEvent', 'abc');
expect(listener.someEvent).toHaveBeenCalledWith('abc'); });});
Wednesday, May 16, 12
![Page 140: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/140.jpg)
var Announce = require('../../src/util/announcer').Announcer;
describe('Announcer', function() { var announcer, listener; beforeEach(function() { announcer = new Announcer(); listener = { someEvent: jasmine.createSpy('listener#someEvent') }; });
it('notifies its listeners when an event they are registered for happens', function() { announcer.addListener('someEvent', listener);
announcer.announce('someEvent', 'abc');
expect(listener.someEvent).toHaveBeenCalledWith('abc'); });});
spec/unit/announcer_spec.js
Wednesday, May 16, 12
![Page 141: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/141.jpg)
Failure
Wednesday, May 16, 12
![Page 142: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/142.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 143: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/143.jpg)
var Announcer = function() {};
Announcer.prototype = { addListener: function(event, listener) { this._listener = listener; },
announce: function(event, data) { this._listener.someEvent(data); }};
Wednesday, May 16, 12
![Page 144: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/144.jpg)
var Announcer = function() {};
Announcer.prototype = { addListener: function(event, listener) { this._listener = listener; },
announce: function(event, data) { this._listener.someEvent(data); }};
src/util/announcer.js
Wednesday, May 16, 12
![Page 145: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/145.jpg)
Passed
Wednesday, May 16, 12
![Page 146: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/146.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 147: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/147.jpg)
var Announce = require('../../src/util/announcer').Announcer;
describe('Announcer', function() { ... it('does not notify its listeners when an event they are not registered for happens', function() { announcer.addListener('anotherEvent', listener);
announcer.announce('someEvent', 'abc');
expect(listener.someEvent).not.toHaveBeenCalled(); });});
Wednesday, May 16, 12
![Page 148: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/148.jpg)
var Announce = require('../../src/util/announcer').Announcer;
describe('Announcer', function() { ... it('does not notify its listeners when an event they are not registered for happens', function() { announcer.addListener('anotherEvent', listener);
announcer.announce('someEvent', 'abc');
expect(listener.someEvent).not.toHaveBeenCalled(); });});
spec/unit/announcer_spec.js
Wednesday, May 16, 12
![Page 149: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/149.jpg)
Failure
Wednesday, May 16, 12
![Page 150: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/150.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 151: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/151.jpg)
var Announcer = function() {};
Announcer.prototype = { addListener: function(event, listener) { this._listener = listener; this._event = event; },
announce: function(event, data) { if (this._event === event) { this._listener.someEvent(data); } }};
Wednesday, May 16, 12
![Page 152: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/152.jpg)
var Announcer = function() {};
Announcer.prototype = { addListener: function(event, listener) { this._listener = listener; this._event = event; },
announce: function(event, data) { if (this._event === event) { this._listener.someEvent(data); } }};
src/util/announcer.js
Wednesday, May 16, 12
![Page 153: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/153.jpg)
Passed
Wednesday, May 16, 12
![Page 154: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/154.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 155: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/155.jpg)
var Announce = require('../../src/util/announcer').Announcer;
describe('Announcer', function() { ... it('notifies multiple listeners when an event they are registered for happens', function() { var listener2 = { anotherEvent: jasmine.createSpy('listener2#anotherEvent') };
announcer.addListener('anotherEvent', listener); announcer.addListener('anotherEvent', listener2); announcer.announce('anotherEvent', 'abc');
expect(listener.someEvent).toHaveBeenCalledWith('abc'); expect(listener2.someEvent).toHaveBeenCalledWith('abc'); });});
Wednesday, May 16, 12
![Page 156: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/156.jpg)
var Announce = require('../../src/util/announcer').Announcer;
describe('Announcer', function() { ... it('notifies multiple listeners when an event they are registered for happens', function() { var listener2 = { anotherEvent: jasmine.createSpy('listener2#anotherEvent') };
announcer.addListener('anotherEvent', listener); announcer.addListener('anotherEvent', listener2); announcer.announce('anotherEvent', 'abc');
expect(listener.someEvent).toHaveBeenCalledWith('abc'); expect(listener2.someEvent).toHaveBeenCalledWith('abc'); });});
spec/unit/announcer_spec.js
Wednesday, May 16, 12
![Page 157: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/157.jpg)
Failure
Wednesday, May 16, 12
![Page 158: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/158.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 159: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/159.jpg)
var Announcer = function() { this._events = {};};
Announcer.prototype = { addListener: function(event, listener) { this._events[event] = this._events[event] || []; this._events[event].push(listener); },
announce: function(event, data) { var registeredListeners = this._events[event] || []; registeredListeners.forEach(function(listener) { listener[event](data); }); }};
Wednesday, May 16, 12
![Page 160: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/160.jpg)
var Announcer = function() { this._events = {};};
Announcer.prototype = { addListener: function(event, listener) { this._events[event] = this._events[event] || []; this._events[event].push(listener); },
announce: function(event, data) { var registeredListeners = this._events[event] || []; registeredListeners.forEach(function(listener) { listener[event](data); }); }};
src/util/announcer.js
Wednesday, May 16, 12
![Page 161: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/161.jpg)
Passed
Wednesday, May 16, 12
![Page 162: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/162.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 163: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/163.jpg)
var Announcer = require('./util/announcer').Announcer;var TurnTracker = function(player1, player2) { this._player1 = player1; this._player2 = player2; this._announcer = new Announcer();};
TurnTracker.prototype = { addListener: function(event, listener) { this._announcer.addListener(event, listener); },
startNewGame: function() { this._announcer.announce('newPlayersTurn', this._player1); }};
Wednesday, May 16, 12
![Page 164: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/164.jpg)
var Announcer = require('./util/announcer').Announcer;var TurnTracker = function(player1, player2) { this._player1 = player1; this._player2 = player2; this._announcer = new Announcer();};
TurnTracker.prototype = { addListener: function(event, listener) { this._announcer.addListener(event, listener); },
startNewGame: function() { this._announcer.announce('newPlayersTurn', this._player1); }};
src/turn_tracker.js
Wednesday, May 16, 12
![Page 165: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/165.jpg)
Passed
Wednesday, May 16, 12
![Page 166: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/166.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 167: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/167.jpg)
Same With DOM Board
ViewWednesday, May 16, 12
![Page 168: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/168.jpg)
var TurnTracker = require('../../src/turn_tracker').TurnTracker;
describe('TurnTracker', function() { ... it('notifies its listeners that it is the next players turn when told to that a player now owns a new cell', function() { turnTracker.startNewGame(); listener.newPlayersTurn.reset();
turnTracker.playerOwnsNewCell({row: 1, column: 1});
expect(listener.newPlayersTurn).toHaveBeenCalledWith( player2); });});
Wednesday, May 16, 12
![Page 169: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/169.jpg)
var TurnTracker = require('../../src/turn_tracker').TurnTracker;
describe('TurnTracker', function() { ... it('notifies its listeners that it is the next players turn when told to that a player now owns a new cell', function() { turnTracker.startNewGame(); listener.newPlayersTurn.reset();
turnTracker.playerOwnsNewCell({row: 1, column: 1});
expect(listener.newPlayersTurn).toHaveBeenCalledWith( player2); });});
spec/unit/turn_tracker_spec.js
Wednesday, May 16, 12
![Page 170: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/170.jpg)
Failure
Wednesday, May 16, 12
![Page 171: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/171.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 172: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/172.jpg)
With Some Refactoring
Wednesday, May 16, 12
![Page 173: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/173.jpg)
var STATES = { PLAYER1_TURN: { playerOwnsNewCell: function(newCellInformation) { this._announcer.announce('newPlayersTurn', this._player2); this._currentState = STATES.PLAYER2_TURN; } },
PLAYER2_TURN: { playerOwnsNewCell: function(newCellInformation) { this._announcer.announce('newPlayersTurn', this._player1); this._currentState = STATES.PLAYER1_TURN; } }};
var TurnTracker = function(player1, player2) { this._announcer = new Announcer(); this._player1 = player1; this._player2 = player2; this._currentState = STATES.PLAYER1_TURN;};
TurnTracker.prototype = { addListener: function(event, listener) { this._announcer.addListener(event, listener); },
playerOwnsNewCell: function(newCellInformation) { this._currentState.playerOwnsNewCell.call(this, newCellInformation); },
startNewGame: function() { this._announcer.announce('newPlayersTurn', this._player1); this._currentState = STATES.PLAYER1_TURN; }};
Wednesday, May 16, 12
![Page 174: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/174.jpg)
var STATES = { PLAYER1_TURN: { playerOwnsNewCell: function(newCellInformation) { this._announcer.announce('newPlayersTurn', this._player2); this._currentState = STATES.PLAYER2_TURN; } },
PLAYER2_TURN: { playerOwnsNewCell: function(newCellInformation) { this._announcer.announce('newPlayersTurn', this._player1); this._currentState = STATES.PLAYER1_TURN; } }};
var TurnTracker = function(player1, player2) { this._announcer = new Announcer(); this._player1 = player1; this._player2 = player2; this._currentState = STATES.PLAYER1_TURN;};
TurnTracker.prototype = { addListener: function(event, listener) { this._announcer.addListener(event, listener); },
playerOwnsNewCell: function(newCellInformation) { this._currentState.playerOwnsNewCell.call(this, newCellInformation); },
startNewGame: function() { this._announcer.announce('newPlayersTurn', this._player1); this._currentState = STATES.PLAYER1_TURN; }};
src/turn_tracker.js
Wednesday, May 16, 12
![Page 175: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/175.jpg)
Passed
Wednesday, May 16, 12
![Page 176: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/176.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 177: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/177.jpg)
Passed
Wednesday, May 16, 12
![Page 178: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/178.jpg)
rake test:acceptance
Passed
Wednesday, May 16, 12
![Page 179: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/179.jpg)
Show And Track Victory
Wednesday, May 16, 12
![Page 180: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/180.jpg)
describe "end to end acceptance test", :type => :request do ... it "marks the board" do ... @application.mark_board(1,0) @application.shows_board( [ ['X','X',' '], ['O','O',' '], [' ',' ',' '] ] ) @application.mark_board(0,2) @application.shows_board( [ ['X','X','X'], ['O','O',' '], [' ',' ',' '] ] ) @application.shows_player1_won endend
Wednesday, May 16, 12
![Page 181: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/181.jpg)
Failure/Error: @application.shows_player1_won
Wednesday, May 16, 12
![Page 182: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/182.jpg)
rake test:acceptance
Failure/Error: @application.shows_player1_won
Wednesday, May 16, 12
![Page 183: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/183.jpg)
DOMBoardView
Main
cellSelected
DO
MBo
ardV
iewLis
tene
r
markCell
TurnTracker
newPlayersTurn
TurnTrackerListener
playerOwnsNewCell
Wednesday, May 16, 12
![Page 184: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/184.jpg)
DOMBoardView
Main
TurnTracker
PlayerplayerOwnsNewCell
markCell
DOMAlert
RenderershowPlayerWonGame
receiveCell
Wednesday, May 16, 12
![Page 185: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/185.jpg)
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var player1 = new Player('X', boardView, alertRenderer); var player2 = new Player('O', boardView, alertRenderer); var turnTracker = new TurnTracker(player1, player2); var eventHandler = { cellSelected: function(cellInformation) { this._currentPlayer.receiveCell(cellInformation); }, newPlayersTurn: function(player) { this._currentPlayer = player; } } var alertRenderer = new DOMAlertRenderer();
turnTracker.addListener('newPlayersTurn', eventHandler); boardView.addListener('cellSelected', eventHandler); player1.addListener('playerOwnsNewCell', turnTracker); player2.addListener('playerOwnsNewCell', turnTracker);
turnTracker.startNewGame(); boardView.renderBoard(3, 3);});
Wednesday, May 16, 12
![Page 186: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/186.jpg)
document.addEventListener("DOMContentLoaded", function() { var boardView = new DOMBoardView(); var player1 = new Player('X', boardView, alertRenderer); var player2 = new Player('O', boardView, alertRenderer); var turnTracker = new TurnTracker(player1, player2); var eventHandler = { cellSelected: function(cellInformation) { this._currentPlayer.receiveCell(cellInformation); }, newPlayersTurn: function(player) { this._currentPlayer = player; } } var alertRenderer = new DOMAlertRenderer();
turnTracker.addListener('newPlayersTurn', eventHandler); boardView.addListener('cellSelected', eventHandler); player1.addListener('playerOwnsNewCell', turnTracker); player2.addListener('playerOwnsNewCell', turnTracker);
turnTracker.startNewGame(); boardView.renderBoard(3, 3);});
main.js
Wednesday, May 16, 12
![Page 187: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/187.jpg)
describe('Player', function() { var player, board, listener; beforeEach(function() { board = new BoardRole(); player = new Player('X', board); listener = new PlayerListenerRole(); player.addListener('playerOwnsNewCell', listener); });
describe('when it is told that to receive a cell', function() { beforeEach(function() { player.receiveCell({row: 2, column: 2}); });
it('tells its board to mark that square with its marker', function() { expect(board.markCell).toHaveBeenCalledWith(2,2,'X'); }); });
Wednesday, May 16, 12
![Page 188: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/188.jpg)
describe('Player', function() { var player, board, listener; beforeEach(function() { board = new BoardRole(); player = new Player('X', board); listener = new PlayerListenerRole(); player.addListener('playerOwnsNewCell', listener); });
describe('when it is told that to receive a cell', function() { beforeEach(function() { player.receiveCell({row: 2, column: 2}); });
it('tells its board to mark that square with its marker', function() { expect(board.markCell).toHaveBeenCalledWith(2,2,'X'); }); });
spec/unit/player_spec.js
Wednesday, May 16, 12
![Page 189: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/189.jpg)
Failure
Wednesday, May 16, 12
![Page 190: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/190.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 191: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/191.jpg)
var Player = function(marker, board, alertRenderer) { this._marker = marker; this._board = board;};
Player.prototype = { receiveCell: function(cellInformation) { this._board.markCell(cellInformation.row, cellInformation.column, this._marker); }};
Wednesday, May 16, 12
![Page 192: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/192.jpg)
var Player = function(marker, board, alertRenderer) { this._marker = marker; this._board = board;};
Player.prototype = { receiveCell: function(cellInformation) { this._board.markCell(cellInformation.row, cellInformation.column, this._marker); }};
src/player.js
Wednesday, May 16, 12
![Page 193: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/193.jpg)
Passed
Wednesday, May 16, 12
![Page 194: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/194.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 195: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/195.jpg)
describe('Player', function() { var player, board, listener; beforeEach(function() { board = new BoardRole(); player = new Player('X', board); listener = new PlayerListenerRole(); player.addListener('playerOwnsNewCell', listener); });
describe('when it is told that to receive a cell', function() { beforeEach(function() { player.receiveCell({row: 2, column: 2}); });
it('tells its board to mark that square with its marker', function() { expect(board.markCell).toHaveBeenCalledWith(2,2,'X'); });
it('notifies its listeners that it owns the cell that was selected', function() { expect(listener.playerOwnsNewCell).toHaveBeenCalledWith( {row: 2, column: 2}); }); ... });
Wednesday, May 16, 12
![Page 196: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/196.jpg)
describe('Player', function() { var player, board, listener; beforeEach(function() { board = new BoardRole(); player = new Player('X', board); listener = new PlayerListenerRole(); player.addListener('playerOwnsNewCell', listener); });
describe('when it is told that to receive a cell', function() { beforeEach(function() { player.receiveCell({row: 2, column: 2}); });
it('tells its board to mark that square with its marker', function() { expect(board.markCell).toHaveBeenCalledWith(2,2,'X'); });
it('notifies its listeners that it owns the cell that was selected', function() { expect(listener.playerOwnsNewCell).toHaveBeenCalledWith( {row: 2, column: 2}); }); ... });
spec/unit/player_spec.js
Wednesday, May 16, 12
![Page 197: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/197.jpg)
Failure
Wednesday, May 16, 12
![Page 198: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/198.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 199: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/199.jpg)
var Player = function(marker, board, alertRenderer) { this._marker = marker; this._board = board; this._announcer = new Announcer();};
Player.prototype = { receiveCell: function(cellInformation) { this._board.markCell(cellInformation.row, cellInformation.column, this._marker); this._announcer.announce('playerOwnsNewCell’, cellInformation); }};
Wednesday, May 16, 12
![Page 200: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/200.jpg)
var Player = function(marker, board, alertRenderer) { this._marker = marker; this._board = board; this._announcer = new Announcer();};
Player.prototype = { receiveCell: function(cellInformation) { this._board.markCell(cellInformation.row, cellInformation.column, this._marker); this._announcer.announce('playerOwnsNewCell’, cellInformation); }};
src/player.js
Wednesday, May 16, 12
![Page 201: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/201.jpg)
Passed
Wednesday, May 16, 12
![Page 202: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/202.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 203: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/203.jpg)
describe('Player', function() { ... it('notifies tells its alerter that it has one the game when it receives all the cells in a row', function() { player.receiveCell({row: 0, column: 0}); player.receiveCell({row: 0, column: 1}); player.receiveCell({row: 0, column: 2}); expect(alerter.playerWonGame).toHaveBeenCalledWith({player: 'X'}); });});
Wednesday, May 16, 12
![Page 204: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/204.jpg)
describe('Player', function() { ... it('notifies tells its alerter that it has one the game when it receives all the cells in a row', function() { player.receiveCell({row: 0, column: 0}); player.receiveCell({row: 0, column: 1}); player.receiveCell({row: 0, column: 2}); expect(alerter.playerWonGame).toHaveBeenCalledWith({player: 'X'}); });});
spec/unit/player_spec.js
Wednesday, May 16, 12
![Page 205: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/205.jpg)
Failure
Wednesday, May 16, 12
![Page 206: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/206.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 207: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/207.jpg)
With Some Refactoring
Wednesday, May 16, 12
![Page 208: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/208.jpg)
var Player = function(marker, board, alertRenderer) { this._marker = marker; this._board = board; this._alerter = alertRenderer; this._announcer = new Announcer(); this._rows = []; for(var i = 0; i < 3; i++) { this._rows[i] = new CellTracker(3); }};
Player.prototype = { receiveCell: function(cellInformation) { this._board.markCell(cellInformation.row, cellInformation.column, this._marker); this._announcer.announce('playerOwnsNewCell’, cellInformation); this._rows[cellInformation.row].takeCell(); if (this._hasWonGame(cellInformation)) { this._alerter.playerWonGame({player: this._marker}); } }};...
Wednesday, May 16, 12
![Page 209: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/209.jpg)
var Player = function(marker, board, alertRenderer) { this._marker = marker; this._board = board; this._alerter = alertRenderer; this._announcer = new Announcer(); this._rows = []; for(var i = 0; i < 3; i++) { this._rows[i] = new CellTracker(3); }};
Player.prototype = { receiveCell: function(cellInformation) { this._board.markCell(cellInformation.row, cellInformation.column, this._marker); this._announcer.announce('playerOwnsNewCell’, cellInformation); this._rows[cellInformation.row].takeCell(); if (this._hasWonGame(cellInformation)) { this._alerter.playerWonGame({player: this._marker}); } }};...
src/player.js
Wednesday, May 16, 12
![Page 210: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/210.jpg)
var CellTracker = function(totalCells) { this._remainingCells = totalCells;};
CellTracker.prototype = { takeCell: function() { this._remainingCells -= 1; },
hasAllCells: function() { return this._remainingCells === 0; }};
Wednesday, May 16, 12
![Page 211: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/211.jpg)
var CellTracker = function(totalCells) { this._remainingCells = totalCells;};
CellTracker.prototype = { takeCell: function() { this._remainingCells -= 1; },
hasAllCells: function() { return this._remainingCells === 0; }};
src/player.js
Wednesday, May 16, 12
![Page 212: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/212.jpg)
Passed
Wednesday, May 16, 12
![Page 213: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/213.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 214: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/214.jpg)
var DOMAlertRenderer = require('ui/dom_alert_renderer').DOMAlertRenderer;
describe('DOMAlertRenderer', function() { it('renders an alert when a player wins the game', function() { var renderer = new DOMAlertRenderer(); renderer.playerWonGame({player: 'X'});
expect(document.body.querySelector('.alert').innerText).toEqual("'X' Wins"); });});
Wednesday, May 16, 12
![Page 215: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/215.jpg)
var DOMAlertRenderer = require('ui/dom_alert_renderer').DOMAlertRenderer;
describe('DOMAlertRenderer', function() { it('renders an alert when a player wins the game', function() { var renderer = new DOMAlertRenderer(); renderer.playerWonGame({player: 'X'});
expect(document.body.querySelector('.alert').innerText).toEqual("'X' Wins"); });});
spec/integration/dom_alert_renderer_spec.js
Wednesday, May 16, 12
![Page 216: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/216.jpg)
Failure
Wednesday, May 16, 12
![Page 217: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/217.jpg)
rake test:unit
Failure
Wednesday, May 16, 12
![Page 218: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/218.jpg)
var DOMAlertRenderer = function() {};
DOMAlertRenderer.prototype = { playerWonGame: function(playerInformation) { var element = document.createElement('div'); element.className = 'alert'; element.innerText = ”’” + playerInformation.player + “‘ Wins”; document.body.appendChild(element); }};
Wednesday, May 16, 12
![Page 219: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/219.jpg)
var DOMAlertRenderer = function() {};
DOMAlertRenderer.prototype = { playerWonGame: function(playerInformation) { var element = document.createElement('div'); element.className = 'alert'; element.innerText = ”’” + playerInformation.player + “‘ Wins”; document.body.appendChild(element); }};
ui/dom_alert_renderer.js
Wednesday, May 16, 12
![Page 220: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/220.jpg)
Passed
Wednesday, May 16, 12
![Page 221: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/221.jpg)
rake test:unit
Passed
Wednesday, May 16, 12
![Page 222: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/222.jpg)
Passed
Wednesday, May 16, 12
![Page 223: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/223.jpg)
rake test:acceptance
Passed
Wednesday, May 16, 12
![Page 224: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/224.jpg)
Other Features
Wednesday, May 16, 12
![Page 225: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/225.jpg)
AI Player?
Wednesday, May 16, 12
![Page 226: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/226.jpg)
DOMBoardView
Main
TurnTracker
PlayerplayerOwnsNewCell
markCell
DOMAlert
RenderershowPlayerWonGame
receiveCell
Wednesday, May 16, 12
![Page 227: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/227.jpg)
Remote Player?
Wednesday, May 16, 12
![Page 228: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/228.jpg)
DOMBoardView
Main
TurnTracker
PlayerplayerOwnsNewCell
markCell
DOMAlert
RenderershowPlayerWonGame
receiveCell
Wednesday, May 16, 12
![Page 229: Extending Your TDD Cycle Into JavaScriptfiles.meetup.com/310796/tdd_javascript.pdf · 1 Wednesday, May 16, 12. Practice TDD/BDD In Ruby/Rails Wednesday, May 16, 12. Question 2 Wednesday,](https://reader034.vdocuments.us/reader034/viewer/2022051806/600173647c9b3b686f2655f1/html5/thumbnails/229.jpg)
Questions?
Gregory Moeck@gregmoeck
Wednesday, May 16, 12