首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ts-jest中恢复导入类函数的模拟

在ts-jest中恢复导入类函数的模拟
EN

Stack Overflow用户
提问于 2020-04-30 12:43:41
回答 1查看 767关注 0票数 0

问题

我在模拟一个函数(只有一个),它是从主类中调用的另一个类导入的。我能够模拟这个函数并返回我提供的值。但是,对于随后的测试,我无法将模拟的函数恢复到正常状态。

任何帮助都将不胜感激!

框架使用: jest + ts-jest

~main.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
export class SubClass{ 

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

main.test.ts

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 14:40:44

mockedFn.key方法在重新分配时丢失,Jest不可能恢复它:

代码语言:javascript
复制
mockedFn.key = jest.fn()

它应该是:

代码语言:javascript
复制
jest.spyOn(mockedFn, 'key').mockImplementation(...)

如果要还原方法或属性,则不应该通过直接分配jest.fn()来监视/模拟方法或属性。这尤其适用于可能交叉污染测试的模拟全局。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61523688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档