Search code examples
typescriptequality

Object Equality in Typescript


I'm creating a lib on vectors in typescript. My very first test failed:).

It's related to object equality in TypeScript/JavaScript but I can't find a way to make the test green. No object equality is mentioned in typescript's official doc http://www.typescriptlang.org/Handbook#classes.

Could someone please give me a hand ?

This is the source code.

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;

Then I have a unit test on this class as follows

 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));
  });
});

When executed obtains the following error

Failures: 
1) vector should add another vector
1.1) Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).

Solution

  • Your test case should work. Here it is passing on jsfiddle.

    However, it seems your actual code was using toBe() instead of toEqual(), since the failure message says "to be" and not "to equal":

    Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).

    Using toBe() will check that the identity of the two objects are the same (ie ===), which they obviously are not. You definitely want toEqual() which does a deep comparison of values.