JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Node.jsのassert.equal()関数とは?使い方と実行例をわかりやすく解説

Node.jsのassert(アサート)モジュールは、関数のアサーション(値の検証)を行うためのさまざまな機能を提供する組み込みモジュールです。その中の一つがassert.equal()関数です。この関数は、実際の値(actual)と期待される値(expected)が等しいかどうかをテストするために使用され、条件が満たされない場合にはアサーションエラー(AssertionError)が発生します。

構文

assert.equal(actual, expected[, message])

パラメータ

各パラメータの詳細は以下の通りです。

  • actual ― 実際に評価対象となる値です。expectedパラメータと比較されます。

  • expected ― 期待される値です。actualパラメータとの一致がチェックされます。

  • message ― actualとexpectedが一致しなかった場合に出力されるエラーメッセージ(文字列)です。省略可能なオプション引数です。

Assertモジュールのインストール

npm install assert

assertモジュールはNode.jsに標準で組み込まれているため、このインストール手順は省略しても問題ありません。最新バージョンを利用したい場合は、以下のコマンドで現在のバージョンを確認できます。

npm version assert

モジュールの読み込み方法

コード内でassertモジュールを使用するには、以下のようにrequire()で読み込みます。

const assert = require("assert");

使用例1:等しくない値の比較

まず、「assertEqual.js」という名前のファイルを作成し、以下のコードをコピーしてください。その後、次のコマンドでプログラムを実行します。

node assertEqual.js

assertEqual.js

// モジュールを読み込む
const assert = require('assert').strict;

var a = 21;
var b = 20;

// 関数の呼び出し
try {
    // a と b が等しいかどうかをチェック
    assert.equal(a, b);
} catch(error) {
    console.log("Error: ", error)
}

実行結果

C:\home\node>> node assertEqual.js
Error: { AssertionError [ERR_ASSERTION]: Input A expected to strictly equal
input B:
+ expected - actual
- 21
+ 20
     at Object.<anonymous> (/home/node/mysql-test/assert.js:10: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: 21,
expected: 20,
operator: 'strictEqual' }

この例では、変数aは21、変数bは20であり、両者の値は等しくないため、AssertionErrorがスローされていることが確認できます。

使用例2:型が異なるが内容が同じ値の比較

続いて、もう一つの例を見てみましょう。

// モジュールを読み込む
const assert = require('assert');

var a = 20;
var b = '20';

// 関数の呼び出し
try {
    // a と b が等しいかどうかをチェック
    assert.equal(a, b);
    console.log("a and b are equal")
} catch(error) {
    console.log("Error: ", error)
}

実行結果

C:\home\node>> node assert.js
a and b are equal

この例では、変数aは整数型の20、変数bは文字列型の'20'と、データ型こそ異なるものの、中身の値は同じです。assert.equal()は緩い等価性(==)で比較を行うため、型の違いは無視され、両者は「等しい」と判断されました。

まとめ

assert.equal()関数は、actualとexpectedの値を比較し、一致しない場合にAssertionErrorを発生させる便利な検証ツールです。ただし、この関数は抽象的等価比較(==)を使用するため、意図しない挙動を避けたい場合は、厳密な比較(===)を行うassert.strictEqual()の使用が推奨されています。実際の開発では、テストコードやデバッグ時に値の妥当性を確認する目的で広く活用できます。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン