问题
我在模拟一个函数(只有一个),它是从主类中调用的另一个类导入的。我能够模拟这个函数并返回我提供的值。但是,对于随后的测试,我无法将模拟的函数恢复到正常状态。
任何帮助都将不胜感激!
框架使用: 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
}发布于 2020-04-30 14:40:44
原mockedFn.key方法在重新分配时丢失,Jest不可能恢复它:
mockedFn.key = jest.fn()它应该是:
jest.spyOn(mockedFn, 'key').mockImplementation(...)如果要还原方法或属性,则不应该通过直接分配jest.fn()来监视/模拟方法或属性。这尤其适用于可能交叉污染测试的模拟全局。
https://stackoverflow.com/questions/61523688
复制相似问题