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 }).
テストケースが機能するはずです。 ここではjsfiddleに渡しています 。
ただし、実際のコードはtoBe()
ではなくtoEqual()
を使用しているようです。エラーメッセージは_"to be"
_ではなく_"to equal"
_であるためです。
期待されるベクトル({x:3、y:4})to beベクトル({x:3、y:4}).
toBe()
を使用すると、2つのオブジェクトの同一性(つまり、_===
_)が同じであることを確認できますが、それらは明らかに異なります。値の詳細な比較を行うtoEqual()
は間違いなく必要です。
TypeScriptオブジェクトの等価性は、JavaScriptオブジェクトの等価性と同じです。これは TypeScriptが単なるJavaScript であるためです。