power-assert in javascript

64
新しい テストライブラリの ご提案 (公開版) 和田 卓人 (a.k.a id:t-wada or @t_wada) Aug 21, 2013 @東京 Node 学園 #10

Upload: takuto-wada

Post on 28-Nov-2014

3.332 views

Category:

Technology


2 download

DESCRIPTION

power-assert in JavaScript Aug 21, 2013 at 10th Tokyo Node Gakuen #tng10

TRANSCRIPT

Page 1: power-assert in JavaScript

新しいテストライブラリのご提案 (公開版)和田 卓人 (a.k.a id:t-wada or @t_wada)Aug 21, 2013 @東京 Node 学園 #10

Page 2: power-assert in JavaScript

当日の講演動画のリンクhttp://bit.ly/1glmC2G

Page 3: power-assert in JavaScript

和田 卓人id: t-wada@t_wadagithub: twada

Page 4: power-assert in JavaScript

とてもニッチなものを作りました

Page 5: power-assert in JavaScript

注: 黒い画面しか出てきません

Page 6: power-assert in JavaScript

通称「きのこ本」

Page 7: power-assert in JavaScript

•良いインタフェースとは次の2つの条件を満たすインタフェース

•正しく使用する方が操作ミスをするより簡単

•誤った使い方をすることが困難

きのこ53: 正しい使い方を簡単に、誤った使い方を困難に

Page 8: power-assert in JavaScript

正しく使用する方が操作ミスをするより簡単

誤った使い方をすることが困難

Page 9: power-assert in JavaScript

正しく使用する方が操作ミスをするより簡単

誤った使い方をすることが困難

Page 10: power-assert in JavaScript

デモ1

Page 11: power-assert in JavaScript

当日のデモ1のリンクhttp://bit.ly/1dNVQW0

Page 12: power-assert in JavaScript

字面だけでなく失敗時の情報も重要

ふるまいがインターフェイスに制約を与える

Page 13: power-assert in JavaScript

assert.equal((7 - 3), 4);assert.equal((7 - 3), 4, "4でしょ");

assert#equal(actual, expected)assert#equal(actual, expected, message)

Node の assert モジュール

Page 14: power-assert in JavaScript

JUnitassertEquals(expected, actual)assertEquals(message, expected, actual)

TestNGassertEquals(actual, expected)assertEquals(actual, expected, message)

PHPUnitassertEquals(expected, actual)assertEquals(expected, actual, message)

他の xUnit はどうか

Page 15: power-assert in JavaScript

どうしてこうなった

Page 17: power-assert in JavaScript

犯人はファウラーだった(自白済)

Page 18: power-assert in JavaScript

正しく使用する方が操作ミスをするより簡単

誤った使い方をすることが困難

Page 19: power-assert in JavaScript

間違えやすい引数は良くない

-> RSpec っぽく書ければ良い?

Page 20: power-assert in JavaScript

デモ2

Page 21: power-assert in JavaScript

当日のデモ2のリンクhttp://bit.ly/1lA73fr

Page 22: power-assert in JavaScript
Page 23: power-assert in JavaScript
Page 24: power-assert in JavaScript

そもそもassert の情報量が多け

ればいいのでは?

Page 25: power-assert in JavaScript

デモ3

Page 26: power-assert in JavaScript

当日のデモ3のリンクhttp://bit.ly/1pHYbSc

Page 27: power-assert in JavaScript

何が起こったんです?

Page 28: power-assert in JavaScript

Caught: Assertion failed:

assert 5 == list.max() - 1 | | | | | | 5 4 | [1, 3, 4, 5, 2] false

at test.run(test.groovy:3)http://d.hatena.ne.jp/genzouw/20100121/1264080325

元ネタは Groovy

Page 29: power-assert in JavaScript

新しいテストライブラリの

ご提案和田 卓人 (a.k.a id:t-wada or @t_wada)Aug 21, 2013 @東京 Node 学園 #10

Page 30: power-assert in JavaScript

power-assertjs 版を作ったよ

和田 卓人 (a.k.a id:t-wada or @t_wada)Aug 21, 2013 @東京 Node 学園 #10

Page 31: power-assert in JavaScript

https://github.com/twada/power-assert

Page 39: power-assert in JavaScript

power-assert のしくみ

Page 40: power-assert in JavaScript

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCode

Page 41: power-assert in JavaScript

esprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCode

jsCode

Page 42: power-assert in JavaScript

esprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

jsCode

Page 43: power-assert in JavaScript

espoweresprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

jsAST

jsCode

Page 44: power-assert in JavaScript

espoweresprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

jsASTjsAST

jsCode

Page 45: power-assert in JavaScript

espoweresprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

escodegen

jsASTjsAST

jsAST

jsCode

Page 46: power-assert in JavaScript

espoweresprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

escodegen

jsASTjsAST

jsASTjsCode

jsCode

Page 47: power-assert in JavaScript

espoweresprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

escodegen

jsASTjsAST

jsASTjsCode

jsCodejsCode

Page 48: power-assert in JavaScript

empower

power-assert

empower

enhanceassert

Page 49: power-assert in JavaScript

empower

context

AssertionError

power-assert

assert

text

power-assert-formatter

contexttext

Error

assertion

Page 50: power-assert in JavaScript

One more thing...

Page 51: power-assert in JavaScript

altJS!

Page 52: power-assert in JavaScript

当日のデモ4のリンクhttp://bit.ly/1jwqQd1

Page 53: power-assert in JavaScript
Page 55: power-assert in JavaScript

espoweresprima

instrumentor (espower-loader / grunt-espower / gulp-espower / espowerify )

jsCodejsAST

escodegen

jsASTjsAST

jsASTjsCode

jsCodejsCode

Page 56: power-assert in JavaScript

espowercoffee-

script-redux

custom instrumentor

csCodejsAST

escodegen

jsASTjsAST

jsASTjsCode

csCodejsCode

Page 57: power-assert in JavaScript

取り組んだこと

Page 58: power-assert in JavaScript

substack patternUMD pattern

Page 59: power-assert in JavaScript

power-assert がもたらすもの

Page 60: power-assert in JavaScript

覚えることは少なく、かつテスト失敗時の情報は多く

Page 61: power-assert in JavaScript

何もなければ黙るのみ落ちるときはやかましく

Page 62: power-assert in JavaScript

テスト書きましょう!

Page 63: power-assert in JavaScript

ご清聴ありがとうございました

Page 64: power-assert in JavaScript

https://github.com/twada/power-assert

ご清聴ありがとうございました