2016-03-09 13 views
7

typescriptのベクトルにlibを作成しています。私の最初のテストは失敗しました:)。Typescriptのオブジェクト等価

これは、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 }). 
+0

[jsfiddle](https://jsfiddle.net/3VuGs/206/)で動作します。その良いリソースを指摘するために、 – Aaron

答えて

6

テストケースが機能するはずです。 Here it is passing on jsfiddle

予想ベクター({X:3、Yは:4})あると失敗メッセージは"to be"なく"to equal"言うため

しかし、それは、実際のコードではなくtoEqual()toBe()を使用していたと思われますベクトル({x:3、y:4})。 toBe()を使用して

は、彼らは明らかにされていない2つのオブジェクトのアイデンティティ(すなわち===)と同じであることを確認します。あなたは間違いなく値の深い比較を行うtoEqual()が必要です。

+1

私の側の愚かな間違い、私はtoEqualしようとしたが、私はファイルを保存することを忘れていた... @アロン、あなたの助けをたくさんthx。 –

4

活字体オブジェクトの平等は、JavaScriptオブジェクトの平等と同じである次のエラーを取得します。これは、​​です。

+0

thx。私はそのブーツからたくさんのことを学びました。 :) @basarat –