php-vcrの紹介
vcr
という有名なgemが存在します。
http通信をmockしてテストをしやすくしてくれるものです。
github.com
vcrが有効になっている状態でhttp通信をするとその内容を記憶してくれます。2回目以降は1回目に通信した内容を使用し、実際に通信は行いません。 手でfixtureのデータを作成する必要がなく、http通信を使用したテストがやりやすくなります。
このvcrのphp版として公開されているのが php-vcr
です。
github.com
分かりやすく説明されているページもあります。
PHP-VCR | Record HTTP interactions while testing
github上で紹介されている使い方ではちょっと使いにくかったので改良してみました。
以下のように使います
<?php use src\Tests\Support\VcrTrait; class Test { use VcrTrait; public function test() { $response = $this->useCassette(function () { // ここでhttp通信処理。内容を"cassettePath/cassette_name.yml"に記憶してくれる return $apiClient->apiRequest(); }, 'cassettePath', 'cassette_name.yml'); } }
useCassette
のcallback内にhttp通信を行う処理を書いてあげて、cassetteファイルの場所を指定してあげるだけです。
使いやすくなりました。