狠狠撸

狠狠撸Share a Scribd company logo
What’s Cuckoo?
@nazomikan
13年6月1日土曜日
誰
@nazomikan
Takuya Nakajima
nazomikan.com
npmjs.org/~nazomikan
Web Engineer @ Next.Co.,LTD
13年6月1日土曜日
今日はNodeのテストの話
13年6月1日土曜日
みんな大好きテストツール
? ci jenkins
? stub系ライブラリ sinon
? スペック書くやつ mocha, chai
13年6月1日土曜日
exports.sum = function () {
var args = Array.prototype.slice.call(arguments)
, i = 0, iz = args.length, res = 0;
for (; i < iz; i++) {
res += args[i];
}
return res;
};
// sum(1, 2, 3, 4)
// > 10
総和を求める処理
13年6月1日土曜日
let’s test
var assert = require(‘assert’);
describe(‘#sum’, function () {
it(‘引数で与えた数の総和を返すこと’, function () {
var testModule = require(‘./test.js’)
, actual = atestModule.sum(1, 2, 3, 4)
;
assert.equal(actual, 10); //pass!
});
});
13年6月1日土曜日
とっても簡単
13年6月1日土曜日
けど簡単にテストできない
やつもいる
13年6月1日土曜日
そう、それはexportsされて
ない処理
13年6月1日土曜日
var util = require(‘util’);
exports.testableMethod = function (a, b) {
var num = a + b;
return formatNumber(num);
};
function untestableMethod(num) {
return util.format(‘?d円’, num);
}
untestable method
testable methodごしでしか
テストできない
13年6月1日土曜日
何故テストできないか
? requireでロードしたモジュールは
exportsされてないローカルプロパティ
にはアクセスできないから
13年6月1日土曜日
moduleスコープの実装
NativeModule.getSource = function(id) {
return NativeModule._source[id];
}
NativeModule.wrap = function(script) {
return NativeModule.wrapper[0] + script + NativeModule.wrapper[1];
};
NativeModule.wrapper = [
'(function (exports, require, module, __filename, __dirname) { ',
'n});'
];
NativeModule.prototype.compile = function() {
var source = NativeModule.getSource(this.id);
source = NativeModule.wrap(source);
..
};
13年6月1日土曜日
無名関数でラップされてるので外から
はローカル変数にアクセスできない
13年6月1日土曜日
Cuckoo
13年6月1日土曜日
what’s cuckoo?
? module内のローカル変数にずかずかと
踏み込める画期的なモジュール!!
? requireのモック化とかもできる
? npm install cuckoo
13年6月1日土曜日
さっきのやつ
var util = require(‘util’);
exports.testableMethod = function (a, b) {
var num = a + b;
return formatNumber(num);
};
function untestableMethod(num) {
return util.format(‘?d円’, num);
}
13年6月1日土曜日
let’s cuckoo!
var assert = require(‘assert’)
, cuckoo = require(‘cuckoo’);
describe(‘#untestableMethod’, function () {
it(‘渡された値をutil.formatに置換文字列として渡す’, function () {
var target, mock = {};
mock.util = {
format: function (pattern, num) {
assert.equal(3, num); // pass
}
};
target = cuckoo.load(‘./test.js’, mock);
target.private.untestableMthod(3);
});
});
13年6月1日土曜日
実演
13年6月1日土曜日
cuckooのtodo
? globalメソッドも簡単にstub/mock化とか
? だれか使ってFBください。
13年6月1日土曜日
まとめ
? sinonやmochaやテストのためのツールは
結構はやってるけどそれでもuntestable
なメソッドはある
? そういうなんのだいたいはcuckooで解
決できる
13年6月1日土曜日
終わりに
? VMモジュールには魔術がつまってるの
で漁ってみるとフロントのJSじゃ到底む
りなことでもできたりするよ!
13年6月1日土曜日
おまけ
? 絵心のない僕がトラッ
クボールで12秒でつく
りました。
? だれかそれっぽいあれ
を作って!!
13年6月1日土曜日
13年6月1日土曜日

More Related Content

What's hot (8)

PDF
Interactive Music II - SuperCollider入門
Atsushi Tadokoro
?
PDF
すごい constexpr たのしくレイトレ!
Genya Murakami
?
PDF
菩萨でもわかる!搁で动かす贰虫肠别濒アドインの作り方
Nagi Teramo
?
PDF
Play frameworkをエヴァンジェる
ke-m kamekoopa
?
PDF
笔颁さえあればいい。
bleis tift
?
PDF
Constexpr 中3女子テクニック
Genya Murakami
?
KEY
とひ?た?せ贬补蝉办别濒濒の森1
Shoko Sasaki
?
PDF
Interactive Music II SuperCollider入門 5 時間構造をつくる
Atsushi Tadokoro
?
Interactive Music II - SuperCollider入門
Atsushi Tadokoro
?
すごい constexpr たのしくレイトレ!
Genya Murakami
?
菩萨でもわかる!搁で动かす贰虫肠别濒アドインの作り方
Nagi Teramo
?
Play frameworkをエヴァンジェる
ke-m kamekoopa
?
笔颁さえあればいい。
bleis tift
?
Constexpr 中3女子テクニック
Genya Murakami
?
とひ?た?せ贬补蝉办别濒濒の森1
Shoko Sasaki
?
Interactive Music II SuperCollider入門 5 時間構造をつくる
Atsushi Tadokoro
?

Viewers also liked (17)

PPS
Borges -poema_a_los_amigos_+
Hiraki Yami
?
PPS
Ro sssh...
Hiraki Yami
?
PPT
1. h&m insurance dmj pcb
shirishkirtane
?
PPTX
Main ideas presentation
jlr5466
?
PDF
Data Exploration and Information Retrieval in the B2C Marketing Department of...
Seun Odueko
?
PPT
Robin sathaye
shirishkirtane
?
PDF
New Life 2013 Summary Report FINAL
Albert Christian Go
?
DOCX
3 golongan yg dimasukan kedalam neraka
Dedi Samsuri
?
PPT
Shipping insurance seminar 25th jan at mumbai are we really insured ck
shirishkirtane
?
PPT
1. dinyar jivaasha b. port operators insurance dmj pcb
shirishkirtane
?
PDF
New Life 2012 Annual Report
Albert Christian Go
?
PPTX
Mini lesson
jlr5466
?
PPTX
Main ideas presentation
jlr5466
?
PPTX
Galapagos islands
Ruth Torres
?
PPT
Unison opg (1)
shirishkirtane
?
DOCX
Infierno contenido
daniel150
?
Borges -poema_a_los_amigos_+
Hiraki Yami
?
Ro sssh...
Hiraki Yami
?
1. h&m insurance dmj pcb
shirishkirtane
?
Main ideas presentation
jlr5466
?
Data Exploration and Information Retrieval in the B2C Marketing Department of...
Seun Odueko
?
Robin sathaye
shirishkirtane
?
New Life 2013 Summary Report FINAL
Albert Christian Go
?
3 golongan yg dimasukan kedalam neraka
Dedi Samsuri
?
Shipping insurance seminar 25th jan at mumbai are we really insured ck
shirishkirtane
?
1. dinyar jivaasha b. port operators insurance dmj pcb
shirishkirtane
?
New Life 2012 Annual Report
Albert Christian Go
?
Mini lesson
jlr5466
?
Main ideas presentation
jlr5466
?
Galapagos islands
Ruth Torres
?
Unison opg (1)
shirishkirtane
?
Infierno contenido
daniel150
?
Ad

What's Cuckoo?