Rovnosť objektov v Typescripte
Vytváram knižnicu o vektoroch v TypeScripte. Môj úplne prvý test zlyhal:).
Súvisí to s rovnosťou objektov v TypeScripte/JavaScripte, ale nemôžem nájsť spôsob, ako otestovať zelenú. V oficiálnej dokumentácii TypeScriptu nie je spomenutá žiadna rovnosť objektov http://www.typescriptlang.org/Handbook#classes.
Mohol by mi niekto prosím podať ruku?
Toto je zdrojový kód.
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;
Potom mám jednotkový test na túto triedu nasledovne
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));
});
});
Keď sa vykoná, získava nasledujúcu chybu
Failures:
1) vector should add another vector
1.1) Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).
Odpoveď č. 1
Váš testovací prípad by mal fungovať. Tu prechádza na jsfiddle.
Avšak zdá sa, že váš skutočný kód používal toBe() namiesto toEqual(), pretože chybová správa hovorí "to be" a nie "to equal":
Očakávané Vector({ x: 3, y: 4 }) by malo byť Vector({ x: 3, y: 4 }).
Použitie toBe() skontroluje, či sú identity dvoch objektov rovnaké (t.j. ===), čo očividne nie sú. Určite chcete toEqual(), ktorý robí hlboké porovnanie hodnôt.
Odpoveď č. 2
Rovnosť objektov v TypeScripte je rovnaká ako rovnosť objektov v JavaScripte. Je to preto, že TypeScript je len JavaScript.