jsdc 2015 - tdd 的開發哲學,以 node.js 為例
TRANSCRIPT
![Page 1: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/1.jpg)
TDD Node.js
![Page 2: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/2.jpg)
SPOOKY
ProgrammerDevOps
Team Leader
Java 6 yearsJavascript 1.5 years
smlsun@facebook
trunk-studio.comblog.trunk-studio.com
![Page 3: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/3.jpg)
• Why we need TDD
• How to start TDD
• Conclusion
OUTLINE
![Page 4: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/4.jpg)
TDD
![Page 5: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/5.jpg)
• Programmer
•
•
![Page 6: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/6.jpg)
• DevOps
•
•
•
![Page 7: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/7.jpg)
• Team Leader
• Member
• Member
•
• Member
![Page 8: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/8.jpg)
![Page 9: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/9.jpg)
![Page 10: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/10.jpg)
![Page 11: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/11.jpg)
![Page 12: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/12.jpg)
![Page 13: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/13.jpg)
![Page 14: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/14.jpg)
![Page 15: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/15.jpg)
![Page 16: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/16.jpg)
![Page 17: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/17.jpg)
TEST
![Page 18: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/18.jpg)
![Page 19: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/19.jpg)
![Page 20: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/20.jpg)
DeveloperQA
![Page 21: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/21.jpg)
TEST SPEC
![Page 22: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/22.jpg)
/
![Page 23: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/23.jpg)
![Page 24: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/24.jpg)
![Page 25: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/25.jpg)
![Page 26: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/26.jpg)
FAIL Edge of Tomorrow
![Page 27: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/27.jpg)
LEAN & AGILE
•
•
•
•
![Page 28: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/28.jpg)
...
![Page 29: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/29.jpg)
TDD TEST CODE
![Page 30: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/30.jpg)
TDD
![Page 31: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/31.jpg)
![Page 32: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/32.jpg)
X TEST vs O TEST
-4-2-60
![Page 33: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/33.jpg)
![Page 34: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/34.jpg)
TDD NODEJS
![Page 35: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/35.jpg)
PackageLibrary
ApplicationServer
![Page 36: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/36.jpg)
LOGIN
• 3 step Login
![Page 37: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/37.jpg)
INITIAL
![Page 38: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/38.jpg)
var liftApp = async () => { await models.sequelize.sync({ force: config.connection.force }); await bootstrap(); app.listen(config.port); return app;}if (env !== 'test') liftApp();module.exports = liftApp
import chai from 'chai';import request from 'supertest';import sinon from 'sinon';import liftApp from '../../server';chai.should();global.sinon = sinon;before(async (done) => { let app = await liftApp(); global.app = app; global.request = request.agent(app.listen()); done();});
APstart
test frameworkstart
![Page 39: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/39.jpg)
SPECdescribe('auth login spec', () => { before(async (done) => { let testUser = {'username': 'test', 'password': 'test'} await models.User.create(testUser); done(); });
it('login should be success.', async (done) => {
let loginUserFormData = { 'username': ‘test', 'password': ‘test' }; request.post(‘/auth/login') .send(loginUserFormData).expect(200) .end((error, res) => { if (error) done(error); let loginResult = res.body; loginResult.success.should.be.true; done(); }) }});
![Page 40: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/40.jpg)
• Mocha test framework
• Supertest API
• Should or Chai spec
![Page 41: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/41.jpg)
MOCK
EX
![Page 42: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/42.jpg)
APIOR
![Page 43: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/43.jpg)
• sinon Mock
Source code
Mock code
![Page 44: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/44.jpg)
Spec
SPECSA/SD
![Page 45: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/45.jpg)
/
SPEC
![Page 46: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/46.jpg)
CI / CD
![Page 47: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/47.jpg)
![Page 48: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/48.jpg)
![Page 49: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/49.jpg)
![Page 50: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/50.jpg)
![Page 51: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/51.jpg)
![Page 52: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/52.jpg)
![Page 53: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/53.jpg)
–
“ ”
![Page 54: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/54.jpg)
![Page 55: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/55.jpg)
•
•
•
•
• from Clean Code
![Page 56: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/56.jpg)
TDD
![Page 57: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/57.jpg)
THANKS!
![Page 58: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例](https://reader036.vdocuments.mx/reader036/viewer/2022082215/58f9b387760da3da068bd6fa/html5/thumbnails/58.jpg)
• http://qualitycoding.org/tdd-testimonial/
• http://gamesfromwithin.com/backwards-is-forward-making-better-games-with-test-driven-development
• http://punnode.com/archives/18016
• http://teddy-chen-tw.blogspot.tw/2014/09/blog-post_22.html