打字稿中的对象平等

Object Equality in Typescript

本问题已经有最佳答案,请猛点这里访问。

我在typescript中创建向量库。我的第一次测试失败了:)。

它与typescript/javascript中的对象相等有关,但我找不到使测试变绿的方法。typescript的官方文档http://www.typescriptlang.org/handbook classes中没有提到对象相等性。

有人能帮我一下吗?

这是源代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;

然后我对这门课做了如下的单元测试

1
2
3
4
5
6
7
8
9
 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));
  });
});

执行时获得以下错误

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


您的测试用例应该可以工作。这里是传给jsiddle的。

但是,您的实际代码似乎使用的是toBe(),而不是toEqual(),因为失败消息显示"to be",而不是"to equal"

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

使用toBe()将检查两个对象的标识是否相同(即===),而它们显然不是。你肯定想要toEqual(),它可以对数值进行深度比较。


typescript对象相等性与javascript对象相等性相同。这是因为typescript只是javascript。