2017-08-11 4 views
4

Existe-t-il un moyen de tester l'égalité des fonctions anonymes avec [email protected]?Test de l'égalité des fonctions anonymes avec Jest

Je suis en train 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 produit 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. 
+1

C'est un hack plutôt qu'une réponse. Vous pouvez essayer 'expect ('' + obj) .toEqual ('' + foo (2))'. Il compare le contenu de la chaîne de fonctions plutôt que la fonction elle-même. – Malice

+0

@Malice ce n'est pas mauvais, même si le second test est plus proche de mon cas d'utilisation, où j'ai assigné l'anon fn à une propriété dans l'objet que je veux comparer. Votre méthode pourrait fonctionner comme la méthode de choix intégrée dans '.toEqual' pour vérifier ce type d'égalité – bitstrider

+0

... mais malheureuse l'égalité n'est pas tout à fait exacte, comme' '' + foo (1) === '' + foo (2) 'évalue à vrai – bitstrider

Répondre

2

Dans une telle situation, sans avoir à réécrire votre logique d'utiliser des fonctions nommées, vous n'avez pas vraiment avoir un autre choix que en déclarant la fonction avant le test, par exemple

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 vérifiez que obj.bar est une fonction, en utilisant expect.any(Function):

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

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