【问题标题】:Object Equality in Typescript [duplicate]Typescript中的对象平等[重复]
【发布时间】:2016-06-24 13:21:47
【问题描述】:

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

这与 TypeScript/JavaScript 中的对象相等性有关,但我找不到使测试变为绿色的方法。 typescript 的官方文档http://www.typescriptlang.org/Handbook#classes 中没有提到对象相等性。

有人可以帮帮我吗?

这是源代码。

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;

然后我对这个类进行单元测试如下

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

执行时得到如下错误

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

【问题讨论】:

标签: typescript equality


【解决方案1】:

TypeScript 对象相等与 JavaScript 对象相等相同。这是因为TypeScript is just JavaScript

【讨论】:

  • 这个答案对问题没有帮助。
【解决方案2】:

您的测试用例应该可以工作。 Here it is passing on jsfiddle.

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

期望向量({ x: 3, y: 4 }) 向量({ x: 3, y: 4 })。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 2021-08-02
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-12-26
    • 2014-03-21
    • 2023-01-20
    相关资源
    最近更新 更多