2017-08-11 6 views
4

Gibt es eine Möglichkeit, anonyme Funktionsgleichheit mit [email protected] zu testen?Testen der anonymen Funktionsgleichheit mit Jest

ich einen Test ähnlich zu passieren versuche:

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}) 
    });  
}); 

, die zur Zeit ergibt:

● >>>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

Dies ist eher ein Hack als eine Antwort. Sie können 'expect ('' + obj) .toEqual ('' + foo (2)) 'versuchen. Es vergleicht den Inhalt der Funktionskette und nicht die Funktion selbst. – Malice

+0

@Malice das ist nicht schlecht, obwohl der zweite Test näher an meinem Anwendungsfall ist, wo ich die Anon Fn einer Eigenschaft in dem Objekt, das ich vergleichen möchte, zugewiesen haben. Ihre Methode könnte als die eingebaute Methode der Wahl innerhalb '.toEqual' für die Überprüfung dieser Art von Gleichheit arbeiten – bitstrider

+0

... aber unglücklicherweise ist die Gleichheit nicht ganz genau, wie" "+ foo (1) ===" + foo (2) 'ergibt sich als wahr – bitstrider

Antwort

2

In einer solchen Situation ohne Ihre Logik zu Umschreiben genannten Funktionen zu verwenden, die Sie nicht wirklich haben Sie eine andere Wahl als Deklaration der Funktion vor dem Test, z

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 }) 
    });  
}); 

Alternativ überprüfen Sie, dass obj.bar ist jede Funktion, mit expect.any(Function):

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

, die tatsächlich mehr Sinn, je nach Kontext des Tests machen könnte.

Verwandte Themen