我一直在努力为在构造函数中满足某些依赖项的类编写单元测试。类是这样的:
class MyClass extends EventEmitter {
private readonly _instance: MyServer
public constructor() {
this._instance = new MyServer()
// things that makes this instance emit events
}
public getInstance() {
return this._instance
}
}
现在 MyServer 类会根据非常具体的系统条件发出一些事件,这些事件在 CI 期间无法重现;所以我认为编写一个FakeMyServer类并将其存入实际的类可以让我控制事件。
const fakeMyServer = new FakeMyServer()
sinon.stub(MyServer, fakeMyServer)
const myClass = new MyClass()
fakeMyServer.emit('connect')
// assert .on() was called
但是,当我这样做或类似的事情(也尝试过 jest.mock、jest.spyOn 等)时,我会遇到各种错误,而且似乎不只是替换“通过反射”。我记得在 Java 中有一个类似的功能,我想知道 TypeScript 是否有类似的功能。