我有一个依赖于类A的类B。我想测试类B中调用类A方法的内部方法。现在,我想通过模拟类A来对类B的方法进行单元测试。
我的代码结构:
class A {
getSomething() {
return "Something";
}
}
class B {
constructor(objectOfClassA: A) {
this._objectOfClassA = objectOfClassA;
}
functionofClassBToTest() {
const returnValueFromClassA = this._objectOfClassA.getSomething();
return returnValueFromClassA;
}
}
我目前尝试过的:
import ....
import { mocked } from 'jest-mock';
jest.mock("./A", () => {
return {
A: jest.fn().mockImplementation(() => {
return {
getSomething: getSomethingMock
}
})
};
});
const getSomethingMock = jest.fn().mockImplementation(() => {
return "Mock value";
});
const mockA = mocked(A, true);
test("test functionofClassBToTest", () => {
const classBToTest = new B(mockA);
expect(classBToTest.functionofClassBToTest.toStrictEqual("Mock value");
});
我遇到的错误如下:
TypeError: this._objectOfClassA.getSomething is not a function
注意:我不想在我的测试函数内初始化一个A类对象。我只想模拟这个类。
我还在StackOverflow上找到了一些相关的帖子: Post1 和 Post2,但都没有起作用。
更新:感谢James的下面的回答,这个问题已经解决了。对于包含私有成员的类的模拟,我提出了另一个SO问题。请务必阅读。