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.
そのような状況では、名前付き関数を使用するようにロジックを書き換えずに、テストの前に関数を宣言する以外の選択肢はありません。
_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 })
_
実際には、テストのコンテキストに応じてより意味があります。