私は、jestのユースケースに従って最善のアプローチをとる方法を見つけようとしています。
関数をモックしたくはありません。それをスパイして、元の実装に作業を任せてください。 postgresドライバーでクエリが呼び出された回数を追跡したいとしましょう。 次のアプローチが機能します。
const querySpy = pg.Client.prototype.query = jest.fn(pg.Client.prototype.query);
expect(querySpy.mock.calls.length).toBe(2)
問題は、同じファイル内の他のユーザーに影響を与えないように、テストの最後に元の実装も割り当てる必要があることです。 したがって、1人の人がそのようなクリーンアップを忘れた場合、テストの分離を破るのは簡単です。
また、ジャスミンにはspyOnがあり、これはjestでも機能するようです(ただし、文書化されていません)。これは非常にエレガントなので、次の方法でも同じことができます。
const querySpy = spyOn(pg.Client.prototype, 'query').and.callThrough();
expect(querySpy.calls.count()).toEqual(3);
そして、ジャスミンは、テスト後にスパイを自動的に削除すると主張しています。これは素晴らしいことです。
しかし、それが冗談の公式の一部になるかどうかはわかりませんか? 問題は、ジャスミンスパイが冗談のモックとは異なるインターフェースを持っていることです。 したがって、モック機能を拡張して、 spyOn
などを使用してスパイに簡単に使用できるようにするのが最善だと思います。
フィードバックを歓迎します。
これは#1679の一部として追跡されます。
これについては間違っているかもしれませんが、 expect.spyOn
は、テストの最後に要求された「自動復元」を実行しないという点で、ジャスミンspyOn
$と違いはありませんか? この機能はかなりきちんとしていて、スペックファイルをクリアすると思います。 #1679を統合するときに、この種の機能を追加する計画はありますか?
#2534も参照してください。
最も参考になるコメント
これについては間違っているかもしれませんが、
expect.spyOn
は、テストの最後に要求された「自動復元」を実行しないという点で、ジャスミンspyOn
$と違いはありませんか? この機能はかなりきちんとしていて、スペックファイルをクリアすると思います。 #1679を統合するときに、この種の機能を追加する計画はありますか?