10

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 }).
1
  • It works on jsfiddle. Commented Mar 9, 2016 at 22:43

2 Answers 2

8

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.

Sign up to request clarification or add additional context in comments.

Comments

-3

TypeScript object equality is the same as JavaScript object equality. This is because TypeScript is just JavaScript.

1 Comment

This answer is unhelpful to the question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.