はじめに
『テスタブルJavaScript』を少し読み、テストケースを書いてみました。ES6も触ってみたいということで babel + gulp + mocha + power assert という組み合わせを試してみました。
参考にした記事を紹介します。
- ぼくのかんがえたさいきょうのES6プロジェクトテンプレート
- 5分ぐらいでわかるpower assert
- テスト用ライブラリpower-assert
- NODE.JS MODULE PATTERNS
- 通常の数値かどうかはisNaN関数じゃなくてisFinite関数
- Exploring ES6 13. Arrow functions
この記事では、使用したディレクトリ構造と使用したファイルを紹介します。(もし、気づいたことがありましたら、ご指摘いただければ幸いです。)
ディレクトリ構造
使用したディレクトリ構造は下記のディレクトリ構造になります。
.
├── gulpfile.js
├── package.json
├── src
│ └── sum.js
└── test
├── mocha.opts
└── test_sum.js
テストの実行方法は下記のコマンドラインになります。
$ npm install
$ gulp
$ npm test
ファイル
まずは、package.jsonを見てみます。
package.json
{
"name": "sandbox",
"version": "1.0.0",
"description": "babel + gulp + mocha + power assert",
"dependencies": {
"babel": "^5.8.21"
},
"devDependencies": {
"babel": "^5.8.21",
"espower-babel": "^3.2.0",
"gulp": "^3.9.0",
"gulp-babel": "^5.2.0",
"mocha": "^2.2.5",
"power-assert": "^0.11.0"
},
"scripts": {
"test": "mocha"
}
}
次にgulpfile.jsを見てみます。
gulpfile.js
var gulp = require("gulp");
var babel = require("gulp-babel");
gulp.task("default", function () {
return gulp.src("src/*.js")
.pipe(babel())
.pipe(gulp.dest("dist"));
});
mocha.optsを見てみます。
mocha.opts
--compilers js:espower-babel/guess
test_sum.jsを見てみます。
test_sum.js
import assert from 'power-assert'
import sum from '../src/sum'
describe('sum', () => {
it('12 + 23', () => {
assert(sum(12, 23) === 35)
})
it('234', () => {
assert(sum(234) === null)
})
it('abc + def', () => {
assert(sum('abc', 'def') === null)
})
it('1 + NaN', () => {
assert(sum(1, NaN) === null)
})
it('NaN + 2', () => {
assert(sum(NaN, 2) === null)
})
it('1 + Infinity', () => {
assert(sum(1, Infinity) === null)
})
it('Infinity + 2', () => {
assert(sum(Infinity, 2) === null)
})
it('1 + false', () => {
assert(sum(1, false) === null)
})
it('true + 2', () => {
assert(sum(true, 2) === null)
})
})
つまらないかもしれませんが、これらを用いれば、sum.jsを実装できます。なので、sum.jsの紹介はまた今度にしましょう。
振り返り
mocha.optsの--require espower-babel/guessを忘れると、mochaと同じ出力になってしまいます。ここはちょっとハマりました。
本当はBrowserifyも使ってみたかったのですが、間に合いませんでした。機会があれば、試してみたいと思います。
requireの使い方が少し不安です。実践では、どのように使っているのか気になるところです。
Babelはアロー関数やセミコロンがないところが良いですね。
最後に、sum.jsを見てみましょう。
sum.js
/**
* @param {Number} x
* @param {Number} y
* @return {Number} Sum of x and y
*/
module.exports = function sum(x, y) {
if (arguments.length != 2) return null
if (typeof x != 'number' || typeof y != 'number') return null
if (x.toString() === 'NaN' || y.toString() === 'NaN') return null
if (x.toString() === 'Infinity' || y.toString() === 'Infinity') return null
return x + y
}