Testing anonymous function equality with Jest

Javascriptnode.jsUnit TestingJestjsEquality

Javascript Problem Overview


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.

Javascript Solutions


Solution 1 - Javascript

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionstriderView Question on Stackoverflow
Solution 1 - JavascriptWiktor CzajkowskiView Answer on Stackoverflow