J'ai un module qui ressemble à ceci:

const config = require('config')
const isActive = config.get('isActive')

const infoMap = new Map()

const set = (key, value) => {
  infoMap.set(key, value)
}

const get = (key) => infoMap.get(key)

module.exports={set, get} 

Et un test où je teste le truc :

let get
let set

beforeEach(() => {
  jest.mock('config')
  mockIsActive = require('config').get.mockReturnValueOnce(true)  

  get = require('../cache/mymap').get
  set = require('../cache/mymap').set
})

describe('The map', () => {
  describe('when data is added', () => {
    set('testKey', "testData")

    it('should contains the data', async () => {
      const dataFromMap = get('testKey')
      assert("testData", dataFromMap)
    })
  })
})

Il échoue lorsque le set est appelé avec :

set is not a function

Ce qui est étrange, c'est que get fonctionne sans problème.

1
s_bei 18 nov. 2020 à 19:51

1 réponse

Meilleure réponse

Vous devez appeler la fonction set à l'intérieur de la fonction it, sinon elle n'est pas encore définie :

describe('when data is added', () => {
    it('should contains the data', async () => {
      set('testKey', "testData")
      const dataFromMap = get('testKey')
      assert("testData", dataFromMap)
    })
  })

beforeEach s'exécute avant chaque fonction, pas avant de décrire. C'est aussi pourquoi get fonctionne dans votre exemple - c'est à l'intérieur de la fonction it.

1
code-gorilla 18 nov. 2020 à 16:59