簡體   English   中英

在 ts-jest 中恢復導入的 class function 的模擬

[英]restore mock of imported class function in ts-jest

問題

我是 mocking 一個 function(只有一個),它是從另一個 class 導入的,它在主 ZA2F21ED4F8EBC21CBB49 中被調用我能夠模擬 function 並返回我提供的值。 但是我無法將模擬的 function 恢復正常以進行后續測試。

任何幫助,將不勝感激!

框架使用:jest + ts-jest

代碼

~main.ts

import {SubClass} from './subclass.ts'
export class MainClass {
 let sub: SubClass = new SubClass()

public async Car(){
  let start = await sub.key();
  return start
}

}

~sub.ts

export class SubClass{ 

public async key(){
  return "you can start the car"
}
}

main.test.ts

import {SubClass} from './subclass.ts'
import {MainClass} from './mainclass.ts'
import {mocked} from 'ts-jest/utils'

jest.mock(./subclass.ts)

let main = new MainClass()
let sub = new SubClass()
let mockedFn = mocked(sub,true)

mockedFn.key = jest.fn().mockImplementation(() => console.log('mocking succesfull'))

afterEach(()=>{
mockedFn.key.mockRestore() // tried mockClear(), mockReset()
}

it('test for main func mocked result',async ()=>{
 const result = await main.car()
 expect(result).toEqual("mocking succesfull")

}
it('test for main func result',async ()=>{
 const result = await main.car()
 expect(result).toEqual("you can start the car") // getting result as undefined
}


原始mockedFn.key方法在重新分配時丟失,Jest 無法恢復它:

mockedFn.key = jest.fn()

它應該是:

jest.spyOn(mockedFn, 'key').mockImplementation(...)

如果一個方法或屬性應該被恢復,它不應該通過直接分配jest.fn()來監視/模擬它。 這尤其適用於可以交叉污染測試的模擬全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM