What's Cuckoo?

511 views

Published on

Nodeのテストを簡単にしてくれるCuckooモジュールの紹介(押し売り)

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
511
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

What's Cuckoo?

  1. 1. What’s Cuckoo?@nazomikan13年6月1日土曜日
  2. 2. 誰@nazomikanTakuya Nakajimanazomikan.comnpmjs.org/~nazomikanWeb Engineer @ Next.Co.,LTD13年6月1日土曜日
  3. 3. 今日はNodeのテストの話13年6月1日土曜日
  4. 4. みんな大好きテストツール• ci jenkins• stub系ライブラリ sinon• スペック書くやつ mocha, chai13年6月1日土曜日
  5. 5. 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日土曜日
  6. 6. let’s testvar 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日土曜日
  7. 7. とっても簡単13年6月1日土曜日
  8. 8. けど簡単にテストできないやつもいる13年6月1日土曜日
  9. 9. そう、それはexportsされてない処理13年6月1日土曜日
  10. 10. 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 methodtestable methodごしでしかテストできない13年6月1日土曜日
  11. 11. 何故テストできないか• requireでロードしたモジュールはexportsされてないローカルプロパティにはアクセスできないから13年6月1日土曜日
  12. 12. 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. 13. 無名関数でラップされてるので外からはローカル変数にアクセスできない13年6月1日土曜日
  14. 14. Cuckoo13年6月1日土曜日
  15. 15. what’s cuckoo?• module内のローカル変数にずかずかと踏み込める画期的なモジュール!!• requireのモック化とかもできる• npm install cuckoo13年6月1日土曜日
  16. 16. さっきのやつ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日土曜日
  17. 17. 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日土曜日
  18. 18. 実演13年6月1日土曜日
  19. 19. cuckooのtodo• globalメソッドも簡単にstub/mock化とか• だれか使ってFBください。13年6月1日土曜日
  20. 20. まとめ• sinonやmochaやテストのためのツールは結構はやってるけどそれでもuntestableなメソッドはある• そういうなんのだいたいはcuckooで解決できる13年6月1日土曜日
  21. 21. 終わりに• VMモジュールには魔術がつまってるので漁ってみるとフロントのJSじゃ到底むりなことでもできたりするよ!13年6月1日土曜日
  22. 22. おまけ• 絵心のない僕がトラックボールで12秒でつくりました。• だれかそれっぽいあれを作って!!13年6月1日土曜日
  23. 23. 13年6月1日土曜日

×