web-dev-qa-db-ja.com

Typescriptでのオブジェクトの等価性

TypeScriptのベクターにlibを作成しています。私の最初のテストは失敗しました:)。

TypeScript/JavaScriptでのオブジェクトの等価性に関連していますが、テストをグリーンにする方法が見つかりません。 TypeScriptの公式ドキュメント http://www.typescriptlang.org/Handbook#classes では、オブジェクトの等価性については言及されていません。

誰かが私に手を貸してくれませんか?

これがソースコードです。

class Vector {
    x: number;
    y: number;

    constructor(x: number, y: number) {
        this.x = x;
        this.y = y;
    }

    add(that: Vector) {
        return new Vector(this.x + that.x, this.y + that.y);
    }
}

export = Vector;

次に、このクラスの単体テストを次のように行います

 var Vector = require("../lib/vector")

 describe("vector", function () {
  it("should add another vector", function () {
    var v1 = new Vector(1, 1);
    var v2 = new Vector(2, 3);
    expect(v1.add(v2)).toEqual(new Vector(3, 4));
  });
});

実行すると、次のエラーが発生します

Failures: 
1) vector should add another vector
1.1) Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).
9
Hui Wang

テストケースが機能するはずです。 ここではjsfiddleに渡しています

ただし、実際のコードはtoBe()ではなくtoEqual()を使用しているようです。エラーメッセージは_"to be"_ではなく_"to equal"_であるためです。

期待されるベクトル({x:3、y:4})to beベクトル({x:3、y:4}).

toBe()を使用すると、2つのオブジェクトの同一性(つまり、_===_)が同じであることを確認できますが、それらは明らかに異なります。値の詳細な比較を行うtoEqual()は間違いなく必要です。

6
Aaron Beall

TypeScriptオブジェクトの等価性は、JavaScriptオブジェクトの等価性と同じです。これは TypeScriptが単なるJavaScript であるためです。

5
basarat