Objektsjämställdhet i Typescript
Jag skapar ett bibliotek om vektorer i TypeScript. Mitt allra första test misslyckades :)
Det är relaterat till objektsjämförelse i TypeScript/JavaScript men jag kan inte hitta ett sätt att få testet att bli grönt. Ingen objektsjämförelse nämns i TypeScripts officiella dokumentation http://www.typescriptlang.org/Handbook#classes.
Kan någon snälla ge mig en hand?
Detta är källkoden.
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;
Sedan har jag ett enhetstest på den här klassen enligt följande
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));
});
});
När det körs uppstår följande fel
Failures:
1) vector should add another vector
1.1) Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).
Svar #1
Ditt testfall borde fungera. Här fungerar det på jsfiddle.
Det verkar dock som att din faktiska kod använde toBe() istället för toEqual(), eftersom felmeddelandet säger "to be" och inte "to equal":
Förväntad Vector({ x: 3, y: 4 }) att vara Vector({ x: 3, y: 4 }).
Att använda toBe() kommer att kontrollera att identiteten hos de två objekten är densamma (dvs ===), vilket de uppenbarligen inte är. Du vill definitivt använda toEqual() som gör en djup jämförelse av värden.
Svar #2
TypeScript-objektslikhet är samma som JavaScript-objektslikhet. Detta beror på att TypeScript bara är JavaScript.