Node.js assert モジュール
Node.js のassertモジュールは、単体テストを記述するための組み込みツールライブラリです。一連のアサーション関数を提供し、コードの動作が期待どおりであるかを検証します。アサーションが失敗した場合、assertモジュールがAssertionError例外をスローします。
assertモジュールは開発・テスト段階での使用に非常に適しており、開発者がコードの問題を迅速に発見するのに役立ちます。
assert モジュールをどう使うか?
使用するにはassertモジュールは、まずそれをインポートする必要があります:
基本的なアサーションメソッド
1. assert.ok(value[, message])
assert.ok()最も基本的なアサーションメソッドであり、テストするのはvalue真値(truthy)であるかどうかです。もしvalue偽値(falsy)である場合は、AssertionError。
例
assert.ok(1); // パス
assert.ok(false); // AssertionError をスロー
assert.ok(0, 'value is falsy'); // AssertionError: value is falsy をスロー
2. assert.equal(actual, expected[, message])
assert.equal()使用==演算子による比較actualとexpected等しいかどうか(緩い等価)。
例
assert.equal(1, '1'); // パス
assert.equal(1, 2); // AssertionError をスロー
3. assert.strictEqual(actual, expected[, message])
assert.strictEqual()使用===演算子による比較actualとexpected厳密に等しいかどうか。
例
assert.strictEqual(1, '1'); // AssertionError をスロー
4. assert.deepEqual(actual, expected[, message])
assert.deepEqual()2つのオブジェクトまたは配列の内容が等しいかどうかを比較するために使用されます(再帰的比較)。
例
assert.deepEqual([1, 2], [1, 2]); // パス
assert.deepEqual({ a: 1 }, { a: '1' }); // パス(緩い比較)
5. assert.deepStrictEqual(actual, expected[, message])
assert.deepStrictEqual()に類似していますdeepEqualただし、厳密な比較(===)。
例
assert.deepStrictEqual({ a: 1 }, { a: '1' }); // AssertionError をスロー
その他の一般的なアサーションメソッド
1. assert.notEqual(actual, expected[, message])
テストするactualとexpected等しくないかどうか(!=)。
例
assert.notEqual(1, '1'); // AssertionError をスロー
2. assert.notStrictEqual(actual, expected[, message])
テストするactualとexpected厳密に等しくないかどうか(!==)。
例
assert.notStrictEqual(1, 1); // AssertionError をスロー
3. assert.throws(block[, error][, message])
テストするblock関数がエラーをスローするかどうか。
例
() => {
throw new Error('Wrong value');
},
Error
); // パス
assert.throws(
() => {
throw new Error('Wrong value');
},
/Wrong/
); // パス(正規表現でエラーメッセージにマッチ)
4. assert.doesNotThrow(block[, error][, message])
テストするblock関数がエラーをスローしないかどうか。
例
() => {
const x = 1 + 1;
},
Error
); // パス
5. assert.fail([message])
強制的にAssertionError。
例
実際の応用例
簡単な関数があると仮定しましょうadd2つの数の和を計算するための:
例
return a + b;
}
使用できますassertモジュールを使って、そのためのテストを書きます:
例
// 正常系のテスト
assert.strictEqual(add(1, 2), 3, '1 + 2 should be 3');
assert.strictEqual(add(-1, 1), 0, '-1 + 1 should be 0');
// 境界値のテスト
assert.strictEqual(add(0, 0), 0, '0 + 0 should be 0');
assert.strictEqual(add(1.5, 2.5), 4, '1.5 + 2.5 should be 4');
// 異常系のテスト
assert.throws(
() => add('1', 2),
TypeError,
'Adding string to number should throw TypeError'
);
注意事項
本番環境:
assertモジュールは主に開発・テスト環境で使用され、本番環境では使用を推奨しません。アサーションが失敗するとプログラムがクラッシュするためです。厳格モード:Node.js はさらに
assert/strictモジュールを提供しています。それはassertモジュールの厳格版であり、すべての比較は厳密な等価性(===)。const assert = require('assert/strict');カスタムエラーメッセージ:各アサーションに明確なエラーメッセージを提供することで、問題を迅速に特定するのに役立ちます。
パフォーマンスの考慮事項:とはいえ
assertモジュールはとても便利ですが、パフォーマンスが重要なコードでは注意して使用すべきです。アサーションチェックは追加のオーバーヘッドを増加させるためです。
まとめ
assertモジュールは Node.js におけるシンプルでありながら強力なテストツールであり、特にユニットテストや開発段階のコード検証に適しています。各種アサーションメソッドを適切に使用することで、コードの正確性を効果的に保証できます。開発完了後は、より専門的なテストフレームワーク(Mocha、Jest など)に置き換えることを忘れないでください。assertモジュールはより包括的なテストを行います。
Node.js 組み込みモジュール