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.

Súvisiace články