node.js で簡単にユニットテストをしてみます。mocha + chai + should などで連携してユニットテストする方法もありますが、今回はシンプルにnode.js の core モジュールにある assert モジュールを使用してみます。
Contents
assert
assert は node の標準モジュールです。
strict モードと legacy モードがあります。どちらでも実行出来ますが、strict モードが推奨されています。
メソッド
メソッドは下記が使えます。
- assert(value[, message])
- assert.deepEqual(actual, expected[, message])
- assert.deepStrictEqual(actual, expected[, message])
- assert.doesNotReject(block[, error][, message])
- assert.doesNotThrow(block[, error][, message])
- assert.equal(actual, expected[, message])
- assert.fail([message])
- assert.fail(actual, expected[, message[, operator[, stackStartFunction]]])
- assert.ifError(value)
- assert.notDeepEqual(actual, expected[, message])
- assert.notDeepStrictEqual(actual, expected[, message])
- assert.notEqual(actual, expected[, message])
- assert.notStrictEqual(actual, expected[, message])
- assert.ok(value[, message])
- assert.rejects(block[, error][, message])
- assert.strictEqual(actual, expected[, message])
- assert.throws(block[, error][, message])
テスト
assert モジュールを require して使用します。
1 |
var assert = require('assert'); |
今回は、assert ディレクトリを作成して、そこへ test.js ファイルを格納して実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
const assert = requre('assert'); 下記引数で assert を実行します。 第一引数:実際の値 第二引数:予測する値 // 下記は実際の値が1で期待される値が1でOKとなります。 assert.equal(1, 1); // 下記は実際の値が1で期待される値が'1'でOKとなります。 assert.equal(1, '1'); // 下記strictモードは実際の値が1で期待される値が'1'でNGとなります。 assert.strictEqual(1, '1'); or const assert = require('assert').strict; assert.equal(1, '1'); // エラー出力を確認する try { assert.strictEqual(1, 2); } catch (err) { console.log(err); } |
実行 OK の場合
1 2 3 4 5 6 7 8 9 10 |
// strict モードで実行 const assert = require('assert').strict; // エラー出力を確認する try { assert.strictEqual(1, '1'); console.log('ok'); } catch (err) { console.log(err); } |
結果 OK の場合
1 2 |
$ node test.js ok |
実行 NG の場合
1 2 3 4 5 6 7 8 9 10 |
// strict モードで実行 const assert = require('assert').strict; // エラー出力を確認する try { assert.strictEqual(1, '1'); console.log('ok'); } catch (err) { console.log(err); } |
結果 NG の場合
diff が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ node test.js { AssertionError [ERR_ASSERTION]: Input A expected to === input B: + expected - actual - 1 + '1' at Object.<anonymous> (/xxx/routes/test/test.js:5:10) at Module._compile (internal/modules/cjs/loader.js:654:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10) at Module.load (internal/modules/cjs/loader.js:566:32) at tryModuleLoad (internal/modules/cjs/loader.js:506:12) at Function.Module._load (internal/modules/cjs/loader.js:498:3) at Function.Module.runMain (internal/modules/cjs/loader.js:695:10) at startup (internal/bootstrap/node.js:201:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3) generatedMessage: true, name: 'AssertionError [ERR_ASSERTION]', code: 'ERR_ASSERTION', actual: 1, expected: '1', operator: '===' } |
まとめ
node.js で簡易テストする分にはasssert モジュールで可能です。assertion だけ出来るのでよければ、こちらを使うこと簡単に実装できます。複雑なテストをする場合はテスティングフレームワークやアサーションライブラリを組み合わせて行う方法もあります。
参考
公式:アサート