我正在使用 ts-mockito 和 jest 测试一个 typescript 项目。在名为
execute
: 的函数上出现这样的错误
Error: 'MyAbstractClass.execute' is not a function
// main.ts
abstract class MyAbstractClass {
abstract execute(arg): Promise<any>;
}
class MyImplementedClass extends MyAbstractClass {
execute(arg): Promise<any> {
// ... do some stuff
return foo;
}
}
// main.test.ts
describe(... {
let mockMyAbstractClass;
let myAbstractClassInstance;
beforeEach(() => {
mockMyAbstractClass = mock(MyAbstractClass);
myAbstractClassInstance = instance(mockMyAbstractClass);
});
it('works', async () => {
// ...
when(mockMyAbstractClass.execute(input)).thenResolve(output); // error is on this line
});
});
我尝试在原型上设置模拟并使用 jest.fn() 来帮助模拟,但没有成功。
似乎您需要定义并实例化您的子类才能使模拟工作:
// Before
let mockMyAbstractClass;
let myAbstractClassInstance;
beforeEach(() => {
mockMyAbstractClass = mock(MyAbstractClass);
myAbstractClassInstance = instance(mockMyAbstractClass);
});
// After
let mockMyAbstractClass: MyClass;
let myAbstractClassInstance: MyClass;
beforeEach(() => {
mockMyAbstractClass = mock(MyClass);
myAbstractClassInstance = instance(MyClass);
});