【发布时间】:2019-10-27 21:07:13
【问题描述】:
考虑两个类A 和B,如下所示:
class A {
private b: B;
public constructor(b: B){
this.b=b;
}
public doSomething(){
this.b.myMethod();
}
}
class B {
public myMethod(){...}
public someOtherMethod(){...}
}
我想在模拟B.myMethod() 的行为的同时测试类A
目前我们这样做:
const bMock: Partial<B> = {
myMethod: jest.fn(<some mock here>),
}
const sut = new A(bMock as any);
sut.doSomething();
expect(bMock.myMethod).toBeCalled();
我们想要实现的是类似的结果,但不必通过 as any 模拟,也不必自己模拟所有方法。检查模拟类型对我们来说非常重要,否则我们将无法通过此测试捕获模拟依赖项中的重大更改。
我们也已经查看了sinon,但在某些情况下,我们不希望调用模拟依赖项的构造函数,因此在创建对象后存根不是一种选择。对整个类进行存根会导致与上述类似的问题。
【问题讨论】:
-
@CharybdeBE 提到的问题缺乏模拟的部分实现和类型安全
标签: typescript jestjs