背景關系:我有依賴于 A 類的 B 類。我想測驗 B 類的一個方法,該方法在內部呼叫 A 類的方法。現在,我想通過模擬 A 類來單元測驗我的 B 類方法。
注 1:A 類有一些私人成員
注2:A類沒有介面
這是我的代碼結構:
class Base {
someMethod() {
return "Hello ";
}
}
class A {
private _baseClassImpl: Base;
constructor(baseClassImpl: Base) {
this._baseClassImpl = baseClassImpl;
}
getSomething() {
return this._baseClassImpl.someMethod() " Something";
}
}
class B {
constructor(objectOfClassA: A) {
this._objectOfClassA = objectOfClassA;
}
functionOfClassBToTest() {
const returnValueFromClassA = this._objectOfClassA.getSomething();
return returnValueFromClassA;
}
}
到目前為止我所嘗試的:
從我之前的 SO 帖子中獲得建議后,我嘗試撰寫如下測驗:
const getSomethingMock = jest.fn().mockImplementation(() => {
return "Mock value";
});
const mockA = jest.Mocked<A> = {
getSomething: getSomethingMock
};
test("test functionOfClassBToTest", () => {
const classBToTest = new B(mockA);
expect(classBToTest.functionofClassBToTest.toStrictEqual("Hello Something");
});
上面的代碼給了我這個錯誤:
Type '{ getSomething: jest.Mock<any, any>; }' is not assignable is not assignable to type 'Mocked<A>'.
Type '{ getSomething: jest.Mock<any, any>; }' is missing the following properties from type 'A': _baseClassImpl
當我嘗試像這樣為 _baseClassImpl 提供模擬值時:
const baseClassMock = jest.Mocked<Base> = {
someMethod: jest.fn()
};
const getSomethingMock = jest.fn().mockImplementation(() => {
return "Mock value";
});
const mockA = jest.Mocked<A> = {
getSomething: getSomethingMock,
_baseClassImpl: baseClassMock
};
打字稿給了我這個錯誤:
Type '{ getSomething: jest.Mock<any, any>; _baseClassImpl: jest.Mocked<Base>; }' is not assignable is not assignable to type 'Mocked<A>'.
Type '{ getSomething: jest.Mock<any, any>; _baseClassImpl: jest.Mocked<Base>; }' is not assignable is not assignable to type 'A'.
Property '_baseClassImpl' is private in type 'A' but not in type '{ getSomething: jest.Mock<any, any>; _baseClassImpl: jest.Mocked<Base>; }'
我已經在我之前的 SO 帖子中嘗試過答案,但它在有私人成員的課堂上不起作用。
一些注意事項:
注 1:A 類包含私人成員
注2:A類沒有介面
注意 3:我不想在我的測驗函式中初始化 A 類的物件。我只想嘲笑課堂。
uj5u.com熱心網友回復:
通過這個github repo的一些點擊和嘗試和幫助,我能夠解決這個問題。
這是供參考的代碼:
測驗 functionOfClassBToTest :
//Note: this can be also written as : const mockA = new (<any>A)() as jest.Mocked<A>;
const mockA = new (<new () => A>A)() as jest.Mocked<A>;
mockA.getSomething = jest.fn();
test("test functionOfClassBToTest", () => {
mockA.getSomething.mockReturnValueOnce("Hello Something");
const classBToTest = new B(mockA);
expect(classBToTest.functionofClassBToTest.toStrictEqual("Hello Something");
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411671.html
標籤:
