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

  • View
    2.913

  • Download
    7

  • Category

    Internet

Preview:

Citation preview

TDD Node.js

SPOOKY

ProgrammerDevOps

Team Leader

Java 6 yearsJavascript 1.5 years

smlsun@facebook

trunk-studio.comblog.trunk-studio.com

• Why we need TDD

• How to start TDD

• Conclusion

OUTLINE

TDD

• Programmer

• DevOps

• Team Leader

• Member

• Member

• Member

TEST

DeveloperQA

TEST SPEC

/

FAIL Edge of Tomorrow

LEAN & AGILE

...

TDD TEST CODE

TDD

X TEST vs O TEST

-4-2-60

TDD NODEJS

PackageLibrary

ApplicationServer

LOGIN

• 3 step Login

INITIAL

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

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(); }) }});

• Mocha test framework

• Supertest API

• Should or Chai spec

MOCK

EX

APIOR

• sinon Mock

Source code

Mock code

Spec

SPECSA/SD

/

SPEC

CI / CD

“ ”

• from Clean Code

TDD

THANKS!

• 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