Node.jsのassert.deepStrictEqual()関数とは?使い方と使用例を解説
Node.jsのassertモジュールは、関数や値のアサーション(検証)に使用されるさまざまな機能を提供しています。その中のひとつがdeepStrictEqual()関数です。
この関数は、actual(実際の値)とexpected(期待される値)の間の「深い厳密等価性」をテストします。オブジェクトの中身まで再帰的に比較し、データ型まで含めて完全に一致しているかどうかを判定します。条件が満たされない場合はAssertionError(アサーションエラー)が発生します。
deepStrictEqual()の構文
assert.deepStrictEqual(actual, expected[, message])
パラメータ
各パラメータの内容は以下の通りです。
actual − expected(期待される値)と比較・評価される実際の値です。
expected − actual(実際の値)と照合される、期待される値です。
message − actualとexpectedが一致しなかった場合に出力される文字列メッセージです。省略可能なフィールドです。
deepEqualとの違い
assert.deepEqual()は等価演算子(==)による緩い比較でプリミティブ値を判定しますが、assert.deepStrictEqual()はObject.is()と同等の厳密な比較を行います。たとえば、数値の3と文字列の'3'は、deepEqualでは一致とみなされますが、deepStrictEqualでは型が異なるため不一致と判定されます。また、deepStrictEqualではオブジェクトのプロトタイプも厳密に比較されます。
assertモジュールのインストール
npm install assert
assertモジュールはNode.jsに組み込まれているため、このステップはスキップしても問題ありません。以下のコマンドでassertのバージョンを確認できます。
npm version assert
モジュールのインポート
const assert = require("assert");使用例:型が異なる場合
まず、「assertDeepStrict.js」という名前のファイルを作成し、以下のコードをコピーしてください。ファイル作成後、次のコマンドでコードを実行します。
node assertDeepStrict.js
assertDeepStrict.js
// assertモジュールのインポート
const assert = require('assert').strict;
try {
// deepStrictEqual関数の呼び出し
// 数値の3と文字列の'3'を比較
assert.deepStrictEqual({ a: 3 }, { a: '3' });
console.log("No Error Occured...")
} catch(error) {
console.log("Error: ", error)
}実行結果
C:\home\node>> node assertDeepStrict.js
Error: { AssertionError [ERR_ASSERTION]: Input A expected to strictly deepequal input B:
+ expected - actual
{
- a: 3
+ a: '3'
}
at Object.<anonymous> (/home/node/mysql-test/assert.js:6:9)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
generatedMessage: true,
name: 'AssertionError [ERR_ASSERTION]',
code: 'ERR_ASSERTION',
actual: { a: 3 },
expected: { a: '3' },
operator: 'deepStrictEqual' }上記の例では、一方の値が数値(整数)であるのに対して、もう一方の値は文字列になっています。型が異なるため、このメソッドは上記のようなエラーをスローしました。
使用例:値が一致する場合
続いて、値が一致するケースを見てみましょう。
// assertモジュールのインポート
const assert = require('assert').strict;
try {
// deepStrictEqual関数の呼び出し
// 両方の値は同じ文字列
assert.deepStrictEqual({ a: '3' }, { a: '3' });
console.log("No Error Occured...")
} catch(error) {
console.log("Error: ", error)
}実行結果
C:\home\node>> node assertDeepStrict.js No Error Occured...
今回は両方の値が同じ文字列'3'だったため、エラーは発生せず正常に処理が完了しました。このように、deepStrictEqual()は型まで含めて値を厳密に検証したい場合に非常に便利な関数です。テストコードやバリデーションの実装時に活用してみてください。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン