web-dev-qa-db-ja.com

Jestによる匿名関数の等価性のテスト

jest@20と匿名関数の等価性をテストする方法はありますか?

私は次のようなテストに合格しようとしています:

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

現在は次のようになります:

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

そのような状況では、名前付き関数を使用するようにロジックを書き換えずに、テストの前に関数を宣言する以外の選択肢はありません。

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

あるいは、_obj.bar_がanyfunctionであるかどうかを、expect.any(Function)

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

実際には、テストのコンテキストに応じてより意味があります。

22