Testing anonymous function equality with Jest

47,810

In such situation, without rewriting your logic to use named functions, you don't really have another choice other than declaring the function before the test, e.g.

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

Alternatively, you can check whether obj.bar is any function, using expect.any(Function):

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

which might actually make more sense depending on the context of the test.

Share:
47,810
strider
Author by

strider

just(do(it)) && have(fun)

Updated on July 09, 2022

Comments

  • strider
    strider almost 2 years

    Is there a way to test anonymous function equality with jest@20?

    I am trying to pass a test similar to:

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

    which currently yields:

      ● >>>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.
    
  • teberl
    teberl about 6 years
    thx for the answer, your alternative way is enough for my tests! expect(result).toEqual({ getFooData: expect.any(Function), foo: 'some foo string' })