私はこれを試しています:
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]
関数をアサートするには、 expect.any(constructor)
を使用できます。
したがって、あなたの例では次のようになります:
expect(AP.require).toBeCalledWith('messages', expect.any(Function))
問題は、関数がオブジェクトであり、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')
expect.any(constructor)を使用できます
または、コンストラクタを指定する必要がない場合は、使用することもできます
expect.anything()