Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JSTDD Intro for EVERY JavaScripters @kanazawa.js v1.7 (2012-03-31)

wtnabe
March 31, 2012

JSTDD Intro for EVERY JavaScripters @kanazawa.js v1.7 (2012-03-31)

デザイナもエンジニアも参加する kanazawa.js のために JavaScript を題材にして TDD を紹介します。

wtnabe

March 31, 2012
Tweet

More Decks by wtnabe

Other Decks in Programming

Transcript

  1. こんな感じ function isOdd( num ) { return num % 2;

    } function testIsOdd() { console.log(true === isOdd( 3 )); console.log(false === isOdd( 2 )); } testIsOdd();
  2. プログラムをテストするプログラム function isOdd( num ) { return num % 2;

    } function testIsOdd() { console.log(true === isOdd( 3 )); console.log(false === isOdd( 2 )); } testIsOdd();
  3. どんなものがあるの? Jasmine ( 44% ) QUnit ( 41% ) via

    http://dailyjs.com/files/DailyJSSurvey2011.pdf ※ 複数回答なので合計は100%以上
  4. <!doctype html> <html> <head> <link href="./qunit.css" rel="stylesheet" <script src="./qunit.js" type="text/javasc

    </head> <body> <h1 id="qunit-header">QUnit example</h1> <h2 id="qunit-banner"></h2> <div id="qunit-testrunner-toolbar"></div> <h2 id="qunit-userAgent"></h2> <ol id="qunit-tests"></ol> <div id="qunit-fixture">test markup, will </body> </html>
  5. TDDの教科書的な流れ Fail it - まず失敗 - Red Fake it -

    仮実装 - Green 三⾓測量 & Refactoring
  6. Fake it 1 内容のないプロダクトコード function isOdd( num ) { return

    true; } test('isOdd', function() { ok( isOdd(3) ); });
  7. Fail it 2 通らないテストパターン function isOdd( num ) { return

    true; } test('isOdd', function() { ok( isOdd(3) ); ok( !isOdd(2) ); // new ! });
  8. Fake it 2 Fail 回避 function isOdd( num ) {

    if ( num == 3 ) { return true; } else if ( num == 2 ) { return false; } } test('isOdd', function() { ok( isOdd(3) ); ok( !isOdd(2) ); // new ! });
  9. つまり今がチャンス! function isOdd( num ) { return num % 2;

    // Refactoring } test('isOdd', function() { ok( isOdd(3) ); ok( !isOdd(2) ); });
  10. もう⼀度おさらい Fail it - まず失敗 - Red Fake it -

    仮実装 - Green 三⾓測量 & Refactoring
  11. 頑張る function padZero( num ) { var str = num.toString();

    if ( str.length < 2 ) { return ('0' + str); } else { return str; } }
  12. Refactoring function padZero( num ) { var str = '0'

    + num; return str.substr(str.length - 2, 2); }
  13. 完成テストコード test('formatDate', function() { equal('2012/02/14', formatDate(new Date('Tue Feb 14 2012

    1 }); test('padZero', function() { equal('02', padZero(2)); equal('12', padZero(12)); });
  14. 完成プロダクトコード function formatDate( date ) { return [date.getFullYear(), padZero(date.getMonth() +

    1), padZero(date.getDate())].join('/'); } function padZero( num ) { var str = '0' + num; return str.substr(str.length - 2, 2); }
  15. Any Questions ? Thanks to developers of testing frameworks, TDD

    evangelists and prcatitioners and panelists And You