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

时间:2018-03-03 04:57:42

标签: javascript unit-testing mocha

我正在使用Karma,Mocha和Chai进行单元测试的项目,并遇到了匹配两个类的问题。基本上,我有一个Root类,用于创建,存储和管理Child类的项目。但是,此Root类还将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。但是,我想添加一个单元测试,以确保始终如此。这就是我被困的地方。

./测试/ 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中导入的那个,所以我的问题是,使用Chai(我想这可以扩展到JavaScript一般)有没有办法检查两个类匹配?或者我有更好的方式来做这件事吗?

1 个答案:

答案 0 :(得分:1)

您似乎没有在Root课程中调用静态方法。这意味着测试正在检查Child类与返回Child类的函数之间的相等性。



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