web-dev-qa-db-fra.com

Test de l'égalité des fonctions anonymes avec Jest

Existe-t-il un moyen de tester l'égalité de fonction anonyme avec jest@20?

J'essaie de passer un test similaire à:

const foo = i => j => {return i*j}
const bar = () => {baz:foo(2), boz:1}

describe('Test anonymous function equality',()=>{

    it('+++ foo', () => {
        const obj = foo(2)
        expect(obj).toBe(foo(2))
    });

    it('+++ bar', () => {
        const obj = bar()
        expect(obj).toEqual({baz:foo(2), boz:1})
    });    
});

qui donne actuellement:

  ● >>>Test anonymous function equality › +++ foo

    expect(received).toBe(expected)

    Expected value to be (using ===):
      [Function anonymous]
    Received:
      [Function anonymous]

    Difference:

    Compared values have no visual difference.

  ● >>>Test anonymous function equality › +++ bar

    expect(received).toBe(expected)

    Expected value to be (using ===):
      {baz: [Function anonymous], boz:1}
    Received:
      {baz: [Function anonymous], boz:1}

    Difference:

    Compared values have no visual difference.
22
bitstrider

Dans une telle situation, sans réécrire votre logique pour utiliser des fonctions nommées, vous n'avez pas vraiment d'autre choix que déclarer la fonction avant le test, par ex.

const foo = i => j => i * j
const foo2 = foo(2)
const bar = () => ({ baz: foo2, boz: 1 })

describe('Test anonymous function equality', () => {
  it('+++ bar', () => {
    const obj = bar()
    expect(obj).toEqual({ baz: foo2, boz: 1 })
  });    
});

Alternativement, vous pouvez vérifier si obj.bar Est une fonction , en utilisant expect.any(Function):

expect(obj).toEqual({ baz: expect.any(Function), boz: 1 })

ce qui pourrait en fait avoir plus de sens selon le contexte du test.

22
Wiktor Czajkowski