Sample b
u
s
t
e
r
.
j
s
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/buster.js
Slide 7
Slide 7 text
Sample h
e
l
p
e
r
s
.
j
s
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/buster.helpers.js
Slide 8
Slide 8 text
Run tests
1. .
/
n
o
d
e
_
m
o
d
u
l
e
s
/
.
b
i
n
/
b
u
s
t
e
r
-
s
e
r
v
e
r
2. Point browser to localhost:1111
3. .
/
n
o
d
e
_
m
o
d
u
l
e
s
/
.
b
i
n
/
b
u
s
t
e
r
-
t
e
s
t
Or install globally, but that's a bad idea
1. r
e
q
u
i
r
e
(
'
b
u
s
t
e
r
-
n
o
d
e
'
)
2. n
o
d
e m
y
T
e
s
t
s
.
j
s
0. n
p
m i
n
s
t
a
l
l g
r
u
n
t
-
b
u
s
t
e
r
n
p
m i
n
s
t
a
l
l -
g g
r
u
n
t
-
c
l
i
b
r
e
w i
n
s
t
a
l
l p
h
a
n
t
o
m
j
s
1. g
r
u
n
t b
u
s
t
e
r
Slide 9
Slide 9 text
Debugging
c
o
n
s
o
l
e
.
l
o
g
(
)
Browser: Chrome Dev Tools, Firebug, whatever
node.js: WebStorm/PhpStorm/IntelliJ, n
o
d
e
-
i
n
s
p
e
c
t
o
r
Slide 10
Slide 10 text
Demo time!
Let's build a test result viewer
Worth mentioning:
b
r
o
w
s
e
r
i
f
y
: client side r
e
q
u
i
r
e
(
)
g
r
u
n
t
-
c
o
n
t
r
i
b
-
w
a
t
c
h - autorun tasks
n
o
d
e
m
o
n - autorestart server
Disclaimer: do a better job for production!
Slide 11
Slide 11 text
i
n
i
t
(
e
l
)
should render status div
should render results div
when status is clicked:
display results
hide results
onchange of textarea should loadResults()
Slide 12
Slide 12 text
should render status div
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/01‑render‑status.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/01‑render‑status.js
Slide 13
Slide 13 text
should render results div
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/02‑render‑results.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/02‑render‑results.js
Slide 14
Slide 14 text
when status is clicked,
display results
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/03‑click‑display.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/03‑click‑display.js
Slide 15
Slide 15 text
when status is clicked, hide
resultss
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/04‑click‑hide.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/04‑click‑hide.js
Slide 16
Slide 16 text
F5!
Slide 17
Slide 17 text
Test doubles
Use for: isolation, forcing a code path, avoiding external calls,
forcing errors
sinon.spy: wraps around a method and records calls
sinon.stub: replaces a method
sinon.mock: replaces methods, built-in expectations
Slide 18
Slide 18 text
onchange of textarea
should loadResults()
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/05‑click‑load.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/05‑click‑load.js
Slide 19
Slide 19 text
l
o
a
d
R
e
s
u
l
t
s
(
)
should change status to loading
should XHR
should onReceived() after XHR
Slide 20
Slide 20 text
should XHR, then
onReceived
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/06‑make‑xhr.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/06‑make‑xhr.js
Slide 21
Slide 21 text
should XHR, then
onReceived (error)
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/07‑make‑xhr‑server.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/07‑make‑xhr‑server.js
Slide 22
Slide 22 text
should XHR, then
onReceived (async)
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/08‑make‑xhr‑async.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/08‑make‑xhr‑async.js
Slide 23
Slide 23 text
should XHR, then
onReceived (promise)
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/09‑make‑xhr‑promise.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/09‑make‑xhr‑promise.js
Slide 24
Slide 24 text
o
n
R
e
s
u
l
t
s
R
e
c
e
i
v
e
d
(
)
when OK, should change status and add results
when failed, should change status and add results
when http error, should retry
Should retry in 100ms
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/12‑should‑retry.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/12‑should‑retry.js
Slide 28
Slide 28 text
F5!
Slide 29
Slide 29 text
Server side: /
r
e
s
u
l
t
s
should serve combined results.html
should 404 when no browser results
should 404 when no node results
Slide 30
Slide 30 text
should serve combined
results.html
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/13‑should‑serve.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/13‑should‑serve.js
Slide 31
Slide 31 text
should 404 when no
browser results
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/14‑when‑no‑browser.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/14‑when‑no‑browser.js
Slide 32
Slide 32 text
should 404 when no node
results
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/15‑when‑no‑node.test.js
https://github.com/dymonaz/javascript‑latvia‑20140114‑
tdd/blob/master/walkthrough/15‑when‑no‑node.js