web-dev-qa-db-fra.com

En utilisant Jest, comment puis-je vérifier qu'un argument d'une fonction simulée est une fonction?

J'essaye ceci:

expect(AP.require).toBeCalledWith('messages', () => {})

où AP.require est une fonction simulée qui devrait recevoir une chaîne et une fonction en tant que second argument.

Le test échoue avec le message: 

Expected mock function to have been called with:
  [Function anonymous] as argument 2, but it was called with [Function anonymous]
13
azeez

Pour affirmer une fonction quelconque, vous pouvez utiliser expect.any(constructor) :

Donc, avec votre exemple, cela ressemblerait à ceci:

expect(AP.require).toBeCalledWith('messages', expect.any(Function))
19
Koen.

Le problème est qu'une fonction est un objet et que comparer des objets en JavaScript échouera s'ils ne sont pas la même instance.

() => 'test' !== () => 'test'

Pour résoudre ce problème, vous pouvez utiliser mock.calls pour vérifier les paramètres séparément.

const call = AP.require.mock.calls[0] // will give you the first call to the mock
expect(call[0]).toBe('message')
expect(typeof call[1]).toBe('function')
8
Andreas Köberle

Vous pouvez utiliser expect.any (constructeur)

ou si vous ne souhaitez pas spécifier le constructeur, vous pouvez également utiliser

attend.anything ()

0
schrodinger's code