ts-mockito:当模拟名为 `execute` 的函数时,我得到“execute 不是函数”

问题描述 投票:0回答:1

我正在使用 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() 来帮助模拟,但没有成功。

typescript testing mocking polymorphism ts-mockito
1个回答
0
投票

似乎您需要定义并实例化您的子类才能使模拟工作:

// 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);
  });
© www.soinside.com 2019 - 2024. All rights reserved.