我正在使用Karma,Mocha和Chai进行单元测试的项目,并遇到了匹配两个类的问题。基本上,我有一个Root
类,用于创建,存储和管理Child
类的项目。但是,此Root
类还将Child
公开为静态属性,以供独立使用。
import Child from './Child';
export class Root {
constructor() {
this.children = [];
}
addChild() {
this.children.push(new Child());
}
static Child() {
return Child;
}
}
这部分有效;通过手动测试,Root.Child
似乎等同于Child
。但是,我想添加一个单元测试,以确保始终如此。这就是我被困的地方。
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一般)有没有办法检查两个类匹配?或者我有更好的方式来做这件事吗?
答案 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