substack氏のjs-traverseを参考にした。
モジュール仕様
コンストラクタに渡したロケールに従いあいさつを返す。
使い方は以下みたいな感じ。
var hello = require('hello');
hello('ja').say(); // => 'こんにちわ!'
hello('en').say(); // => 'Hello!'
hello('???').say(); // => 'Hello!'
hello().say(); // => 'Hello!'
-
ja
を渡すと日本語で、en
を渡すと英語であいさつを返す。 - 不明なロケールを渡した場合は、英語であいさつ。
package.jsonの生成
まずは雑にpackage.json
を作る。
$ npm init
出来上がったpackage.json
は、こんな感じ。
package.json
{
"name": "hello-node-package",
"version": "0.0.1",
"description": "Hello node package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "thina",
"license": "MIT"
}
実装
パッケージのルートディレクトリに、index.js
というファイル名で保存。
index.js
module.exports = function(locale) {
return new Hello(locale);
};
function Hello(locale) {
this.locale = locale;
}
Hello.prototype.say = function() {
var greeting = '';
switch (this.locale) {
case 'ja':
greeting = 'こんにちわ!';
break;
case 'en': // fall through
default:
greeting = 'Hello!';
break;
}
return greeting;
};
動かしてみる
パッケージのルートディレクトリでnodeを起動する。
node
> var hello = require('./')
undefined
> hello('ja').say()
'こんにちわ!'
> hello('en').say()
'Hello!'
> hello('???').say()
'Hello!'
> hello().say()
'Hello!'
テストする
tapeを使う。
$ npm install tape --save-dev
テストは、test
ディレクトリの下に作る。
$ mkdir test
$ touch test/hello.js
テストコードは以下。
hello.js
var hello = require('../');
var test = require('tape');
test('say', function(t) {
var en = hello('en').say();
t.equal(en, 'Hello!');
var ja = hello('ja').say();
t.equal(ja, 'こんにちわ!');
var unknown = hello('unknown').say();
t.equal(en, unknown);
var undef = hello().say();
t.equal(en, undef);
t.end();
});
package.json
にtest command
を定義する。
package.json
{
... (snip) ...
"scripts": {
"test": "tape test/*.js"
},
... (snip) ...
}
テストを実行してみる。
$ npm test
> hello-node-package@0.0.1 test /Users/hina/devel/github/hello-node-package
> tape test/*.js
TAP version 13
# say
ok 1 should be equal
ok 2 should be equal
ok 3 should be equal
ok 4 should be equal
1..4
# tests 4
# pass 4
# ok