web-dev-qa-db-fra.com

Module Jest Mock par test

Je suis assez confus avec moquerie dans Jest et comment tester un peu les implémentations. La chose est que je veux me moquer de différents comportements attendus. 

Y'a-t-il une quelconque façon de réussir cela? comme les importations ne peuvent être que sur le dessus du fichier et pour pouvoir se moquer de quelque chose, il doit être déclaré avant l'importation. J'ai également essayé de transmettre une fonction locale afin de pouvoir écraser le comportement, mais plaisanterie se plaint de ne pas pouvoir transmettre quoi que ce soit au niveau local.

jest.mock('the-package-to-mock', () => ({
  methodToMock: jest.fn(() => console.log('Hello'))
}));

import * as theThingToTest from '../../../app/actions/toTest'
import * as types from '../../../app/actions/types'

it('test1', () => {
  expect(theThingToTest.someAction().type).toBe(types.SOME_TYPE)
})

it('test2', () => {
  //the-package-to-mock.methodToMock should behave like something else
  expect(theThingToTest.someAction().type).toBe(types.SOME_TYPE)
})

en interne comme vous pouvez l'imaginer theThingToTest.someAction() utilise the-package-to-mock.methodToMock

13
Kanekotic

Vous pouvez vous moquer d'un espion et importer le module simulé. Dans votre test, vous définissez le comportement de la maquette en utilisant mockImplementation :

jest.mock('the-package-to-mock', () => ({
  methodToMock: jest.fn()
}));
import {methodToMock} from 'the-package-to-mock'

it('test1', () => {
  methodToMock.mockImplementation(() => 'someValue')
})

it('test2', () => {
   methodToMock.mockImplementation(() => 'anotherValue')
})
36
Andreas Köberle

spyOn a fonctionné mieux pour nous. Voir la réponse précédente:

https://stackoverflow.com/a/54361996/1708297

0
Thomas Hagström