Top Banner
Dave Bouwman - @dbouwman Tom Wayson - @TomWayson Testing Tools and Patterns for JavaScript Mapping Applications
100

Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Jun 25, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Dave Bouwman - @dbouwmanTom Wayson - @TomWayson

Testing Tools and Patterns for JavaScript Mapping Applications

Page 2: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 3: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Functional vs. Unit Testing

Page 4: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 5: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 6: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

write codeto test code.

Page 7: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 8: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

function adder(a, b){return a + b;

}

Page 9: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 10: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

aaronvandike/2340197774

Page 11: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

writingtests

Page 12: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

describe(“resultModel”, function(){

it(‘fetches’, function(){

expect(m.isFetched).toBe(true);

});});

Page 13: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Describe “resultModel”

it “fetches itself”

expect m.isFetched toBe true

suitespecassertion

“matcher”toBeDefined, toBeNull, toEqual, toBeTruthy,toHaveClass, toHaveBeenCalled, toContain

+100

Page 14: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Describe “resultModel”

beforeEach

afterEach

it “fetches itself”

expect m.isFetched toBe true

setupteardown

Page 15: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

create objectsfill with test datasetup DOM

*framework dependent

(json fixtures*)(HTML fixtures*)

Page 16: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Describe “resultModel”

beforeEach

afterEach

it “fetches itself”

expect m.isFetched toBe true

setupteardown

Page 17: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Describe “resultModel”

beforeEach //setup

afterEach //tear down

it “some condition”

expect true toBe true

Describe “with Criteria”

beforeEach //setup

afterEach //tear down

it “some condition”

expect red toBe red

general

specific

Page 18: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 19: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

emoneytg/2953507378

whybother?

Page 20: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1. _________________2. code is correct3. catch regression

Page 21: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1. drive code structure2. code is correct3. catch regression

Page 22: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

average application…

Page 23: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

architecturally…

Page 24: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 25: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

you can make this work…

Page 26: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 27: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

24258698@N04/37656086

Page 28: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

4rulesforsupertests

Page 29: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

writehigh value

tests

Page 30: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

test only your code

Page 31: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

test one thing at a time

Page 32: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

refactorruthlessly

Page 33: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 34: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

$.ajax({…})

Page 35: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

“success”

“error”

$.ajax({…})

test our code!

Page 36: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

“success”

“error”

$.ajax({…})

Page 37: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

“success”

“error”

$.ajax({…})

Page 38: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 39: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

“logic”

Page 40: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

“logic”

“action”

Page 41: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1

2

3

4

“logic”

“action”

test one thing!

Page 42: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1

2

3

4

“logic with calls”

“action functions”

1

2

3

4

Page 43: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1

2

3

4

“high-value” tests

given a,b,c…was fn x called with a,c?did fn x call fn y with c?

1

2

3

4focus on the “logic”

Page 44: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1

2

3

4

testing logic

spies & fakes!

1

2

3

4

Page 45: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

1

2

3

4

testing logic

spies & fakes!

1

2

3

4

Page 46: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

24258698@N04/37656086

Page 47: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Use a framework

Page 48: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Picking a [JS] Framework3 Hours ago in this roomFriday 1pm Primrose B

Page 49: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

map

Page 50: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

polymer

Page 51: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Separation of Concerns

Page 52: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Controllers

Page 53: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Application

Page 54: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

App.on(…)

map

App.trigger(…)Event Bus

App.off(…)

Page 55: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

map

Map Controller

mapController

Page 56: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

map

mapController

spies & fakes!

Page 57: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Symbiotic Relationship

Page 58: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Writing tests makes your code better.

Page 59: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Writing tests makes you code better.

Page 60: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Testable code is more modular.

Page 61: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Testable code is more understandable.

Page 62: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Testable code is more robust.

Page 63: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Testable code is more reusable.

Page 64: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

codeframeworks

kk/7022179049

Page 65: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 66: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Framework

Assertion Library

Reporter

Runner

Utility

Page 67: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

codeWhich is right for me?

kk/7022179049

Well, that depends…

Page 68: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

ryantron/4453018910

Esri Professional ServicesWeb Apps not APIsJSAPI (CDN hosted)

Varying testing experience on the teamEnterprisy Clients

Isolate our code via spies and fakesAMD required

Tests must run automatically, fast, reliably, and silently unless they fail

Test in IE, cloud is not an option

Page 69: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Write Tests

Tests Fail

Write Code

Tests Pass

Tests Pass

Refactor

Page 70: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

> npm install -g karma-cli> cd my-project> npm install karma> npm install karma-[plugin]

sookie/101363593

Sinon.JSistanbul

Page 71: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

> npm install karma-dojo> subl spec/main.js> karma start

https://github.com/tomwayson/esri-karma-tutorial

Page 72: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

/eole/3215868087

Page 73: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

automation

Page 74: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

check syntax…run active tests…

check for regression…

automatically…

report coverage…

Page 75: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

SpecRunner.htmlload in browser…tests run…

results.

Page 76: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

24258698@N04/37656086

Page 77: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

nodetask runner

Page 78: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

productivity power-tools

Page 79: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

watchjshint

jasmine (via karma)

Page 80: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

SpecRunner.htmlload in phantom

…tests run…results in console

runner.tmplunderscore.js

gulpfile.js

Page 81: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

active

fast

all

Tests for the code you are actively working. (fail fast)

Non-Map, Non-Async tests that run 100% locally. Used for TravisCI(builds)

All the test specs. Run automatically after active passes. Coverage reports

Page 82: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

24258698@N04/37656086

Page 83: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Don’t Test the Map

Page 84: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

24258698@N04/37656086

Page 85: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Separation of Concerns

“controller”

Page 86: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Separation of Concerns

“controller”

Page 87: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Test the Map Controller

Page 88: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Map Tests:are slow(er)

usually asyncneed a harness

need dojo

Page 89: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

SpecRunner.htmlload in phantom

…tests run…results in console

runner.tmplunderscore.js

gulpfile.js

Page 90: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 91: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 92: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

http://blog.davebouwman.com/?s=coverage

Page 93: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Example Project

Page 94: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

github.com/mjuniper/OpenData-Backbone

Page 95: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 96: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

write good code

wili/242263471

Page 97: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

write good tests

kk/5262078254

Page 98: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit
Page 99: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

github.com/mjuniper/OpenData-Backbone

Page 100: Testing Tools and Patterns for JavaScript Mapping Applications › library › userconf › dev...Testing Tools and Patterns for JavaScript Mapping Applications. Functional vs. Unit

Rate This Sessionwww.esri.com/RateMyDevSummitSession

github.com/mjuniper/OpenData-Backbone