你能用 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
我正在使用 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