web-dev-qa-db-ja.com

Jestを使用して、モック関数の引数が関数であることを確認するにはどうすればよいですか?

私はこれを試しています:

expect(AP.require).toBeCalledWith('messages', () => {})

ここで、AP.requireは、2番目の引数として文字列と関数を受け取る模擬関数です。

次のメッセージでテストが失敗します。

Expected mock function to have been called with:
  [Function anonymous] as argument 2, but it was called with [Function anonymous]
20
azeez

関数をアサートするには、 expect.any(constructor) を使用できます。

したがって、あなたの例では次のようになります:

expect(AP.require).toBeCalledWith('messages', expect.any(Function))
39
Koen.

問題は、関数がオブジェクトであり、JavaScriptでのオブジェクトの比較が同じインスタンスでない場合に失敗することです。

() => 'test' !== () => 'test'

これを解決するには、 mock.calls パラメータを個別にチェックします

const call = AP.require.mock.calls[0] // will give you the first call to the mock
expect(call[0]).toBe('message')
expect(typeof call[1]).toBe('function')
11

expect.any(constructor)を使用できます

または、コンストラクタを指定する必要がない場合は、使用することもできます

expect.anything()

0