58
TDD ጱ樄咳߽䋊 Node.js

JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

Embed Size (px)

Citation preview

Page 1: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TDD Node.js

Page 2: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

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 為例

• Why we need TDD

• How to start TDD

• Conclusion

OUTLINE

Page 4: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TDD

Page 5: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

• Programmer

Page 6: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

• DevOps

Page 7: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

• Team Leader

• Member

• Member

• Member

Page 8: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 9: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 10: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 11: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 12: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 13: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 14: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 15: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 16: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 17: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TEST

Page 18: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 19: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 20: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

DeveloperQA

Page 21: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TEST SPEC

Page 22: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

/

Page 23: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 24: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 25: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 26: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

FAIL Edge of Tomorrow

Page 27: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

LEAN & AGILE

Page 28: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

...

Page 29: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TDD TEST CODE

Page 30: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TDD

Page 31: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 32: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

X TEST vs O TEST

-4-2-60

Page 33: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 34: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TDD NODEJS

Page 35: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

PackageLibrary

ApplicationServer

Page 36: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

LOGIN

• 3 step Login

Page 37: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

INITIAL

Page 38: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

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 為例

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 為例

• Mocha test framework

• Supertest API

• Should or Chai spec

Page 41: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

MOCK

EX

Page 42: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

APIOR

Page 43: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

• sinon Mock

Source code

Mock code

Page 44: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

Spec

SPECSA/SD

Page 45: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

/

SPEC

Page 46: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

CI / CD

Page 47: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 48: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 49: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 50: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 51: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 52: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 53: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

“ ”

Page 54: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例
Page 55: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

• from Clean Code

Page 56: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

TDD

Page 57: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

THANKS!

Page 58: JSDC 2015 - TDD 的開發哲學,以 Node.js 為例

• 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