[英]aws-sdk-mock not mocking when using Typescript and ts-jest
[英]It's not possible to mock classes with static methods using jest and ts-jest
我有兩個類來模擬簡單的求和運算。
import SumProcessor from "./SumProcessor";
class Calculator {
constructor(private _processor: SumProcessor) { }
sum(a: number, b: number): number {
return this._processor.sum(a, b)
}
}
export default Calculator
和操作處理器。
class SumProcessor {
sum(a: number, b: number): number {
return a + b
}
static log() {
console.log('houston...')
}
}
export default SumProcessor
我正在嘗試模擬 SumProcessor 類以使用 jest+ts-jest 編寫以下單元測試。
import Calculator from "./Calculator"
import SumProcessor from "./SumProcessor"
import { mocked } from "ts-jest/utils"
jest.mock('./SumProcessor')
describe('Calculator', () => {
it('test sum', () => {
const SomadorMock = <jest.Mock>(SumProcessor)
SomadorMock.mockImplementation(() => {
return {
sum: () => 2
}
})
const somador = new SomadorMock()
const calc = new Calculator(somador)
expect(calc.sum(1, 1)).toBe(2)
})
})
當類 SumProcessor 中存在靜態方法時,模擬代碼 const SomadorMock = (SumProcessor) 指示以下編譯錯誤:
TS2345: Argument of type '() => jest.Mock<any, any>' is not assignable to parameter of type '(values?: object, option
s?: BuildOptions) => SumOperator'.
Type 'Mock<any, any>' is missing the following properties from type 'SumOperator...
如果從 SumProcessor 類中刪除靜態方法,則一切正常。
有人可以幫忙嗎?
因為你已經用jest.mock('./SumProcessor');
了SumProcessor
類jest.mock('./SumProcessor');
你可以在你想要模擬的方法中添加一個間諜,例如: jest.spyOn(SumProcessor.prototype, 'sum').mockImplementation(() => 2);
這樣你的測試類看起來像這樣:
import Calculator from "./Calculator"
import SumProcessor from "./SumProcessor"
jest.mock('./SumProcessor')
describe('Calculator', () => {
it('test sum', () => {
jest.spyOn(SumProcessor.prototype, 'sum').mockImplementation(() => 2);
const somador = new SumProcessor();
const calc = new Calculator(somador)
expect(calc.sum(1, 1)).toBe(2)
})
})
簡單多了,對吧?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.