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

【Jasmine】JavaScriptテストにおけるtoBeとtoEqualの違いを解説

配列の比較には2つのパターンがある

Jasmineで配列同士を比較する場合、その意味合いとして大きく分けて2つのパターンが存在します。

  • 両者がメモリ上の同一の配列オブジェクトを参照している。

  • それぞれ異なるオブジェクトを参照しているが、その内容(要素)がすべて等しい。

この2つのパターンに対応するため、JasmineにはtoBetoEqualという2つのマッチャーが用意されています。それぞれの違いを具体例とともに見ていきましょう。

例1:toBeによる参照の一致チェック

ケース1のように、変数が同じオブジェクトを参照しているかどうかを確認したい場合は、toBeメソッドを使用します。このメソッドは参照(同一性)の一致を検証します。

describe("Array Equality", () => {
    it("should check for array reference equility", () => {
        let arr = [1, 2, 3];
        let arr2 = arr;
        // 同一の参照なので成功する
        expect(arr).toBe(arr2);
        // 参照が等しくないため失敗する
        expect(arr).toBe([1, 2, 3]);
    });
});

出力結果

上記のコードを実行すると、次のような出力が得られます。

1) Array Equality should check for array equility
Message:
    Expected [ 1, 2, 3 ] to be [ 1, 2, 3 ]. Tip: To check for deep equality, use .toEqual() instead of .toBe().

たとえ中身が完全に同じ [1, 2, 3] であっても、別々に生成された配列はメモリ上で異なるオブジェクトのため、テストは失敗します。エラーメッセージのヒントにもあるように、値そのものの一致を確認したい場合は .toBe() ではなく .toEqual() を使うことが推奨されています。

例2:toEqualによる深い比較

ケース2のように、オブジェクトが異なっていても内容が等しいことを確認したい場合は、toEqualメソッドを使用して配列の深い比較(ディープイコール)を行います。

describe("Array Equality", () => {
    it("should check for array reference equility", () => {
        let arr = [1, 2, 3];
        let arr2 = arr;
        // 同一の参照なので成功する
        expect(arr).toEqual(arr2);
        // 内容が等しいため成功する
        expect(arr).toEqual([1, 2, 3]);
    });
});

出力結果

上記のコードを実行すると、すべてのテストが成功し、次のような出力が得られます。

1 spec, 0 failures

まとめ:使い分けのポイント

toBeは「同一のオブジェクト(参照)であるか」を検証するのに対し、toEqualは「オブジェクトの内容が等しいか」を検証します。プリミティブ値や同一インスタンスの確認にはtoBe、配列やオブジェクトの中身を比較したい場合にはtoEqualを使う、というのが基本的な使い分けのルールです。テストの意図に合わせて適切なマッチャーを選択しましょう。

  1. Jasmine.jsで配列を比較する方法:toBeとtoEqualの使い分け

    JavaScriptでテストコードを書く際、配列同士を比較する場面はよくあります。Jasmineでは、配列の比較は大きく次の2つのパターンに分けられます。両者がメモリ上の同一の配列オブジェクトを参照している参照先は異なるオブジェクトだが、中身(要素)がすべて等しいケース1:参照の一致を確認する「toBe」ケース1のように、同じオブジェクトへの参照かどうかを確認したい場合は、toBeマッチャーを使用します。toBeは厳密等価演算子(===)と同様に、参照の一致をチェックします。例を見てみましょう。サンプルコードdescribe(Array Equality, () => { it(

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の