восстановить макет импортированной функции класса в ts-jest - PullRequest
0 голосов
/ 30 апреля 2020

Issue

Я высмеиваю функцию (только одну), которая импортируется из другого класса, который вызывается внутри основного класса. Я могу смоделировать функцию и вернуть значения, которые я предоставляю. Но я не могу восстановить смоделированную функцию обратно в нормальное состояние для последующих тестов.

Любая помощь будет оценена!

Использование фреймворка: 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
}


1 Ответ

0 голосов
/ 30 апреля 2020

Оригинальный mockedFn.key метод теряется при переназначении, Jest не может его восстановить:

mockedFn.key = jest.fn()

Это должно быть:

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

Если метод или свойство предполагается восстановить, его нельзя шпионить / высмеивать, назначая jest.fn() напрямую. Это особенно относится к фиктивным глобалам, которые могут перекрестно загрязнять тесты.

...