你能用 Chai 检查两个 类 是否相同吗?

Can you check if two classes are the same using Chai?

我正在使用 Karma、Mocha 和 Chai 进行单元测试,并且 运行遇到了匹配两个 classes 的问题。本质上,我有一个 Root class 创建、存储和管理 Child class 的项目。但是,此 Root class 还将 Child 公开为静态 属性 以供独立使用。

./src/Root.js:

import Child from './Child';

export class Root {
    constructor() {
        this.children = [];
    }

    addChild() {
        this.children.push(new Child());
    }

    static Child() {
        return Child;
    }
}

这部分有效;从手动测试来看,Root.Child 似乎等同于 Child。但是,我想添加一个单元测试以确保始终如此。这就是我被困的地方。

./test/root.spec.js:

import Root from './src/Root';
import Child from './src/Child';

describe('Root', () => {
    it('should be a class', () => {
        expect(Root).to.be.a('function'); // Passes
    });

    it('should expose Child as a static prop', () => {
        expect(Root).to.have.property('Child'); // Passes by itself
        expect(Root.Child).to.equal(Child); // Fails
    });
});

当我 运行 这个测试时,我得到一个失败说明:expected [Function: Child] to equal [Function: Child]

我知道在 Root 中导入的 Child 是 root.spec 中导入的 "separate",所以我的问题是,使用 Chai(我想这可以扩展到 JavaScript 一般)有没有办法检查两个 class 是否匹配?或者我有更好的方法可以做到这一点吗?

看起来您没有在 Root class 中调用静态方法。这意味着测试正在检查您的 Child class 和 returns 您的 Child class.

的函数之间的相等性

class MyClass {}

class MyOtherClass {
  static MyClass() {
    return MyClass
  }
}

console.log(MyClass === MyClass) //true
console.log(MyOtherClass.MyClass === MyClass) //false
console.log(MyOtherClass.MyClass() === MyClass) //true