使用するバージョンです。(結構古いバージョンでも大丈夫だと思います。)
mockeryはデフォルトで入っています。
Laravel 9
mockery 1.4
ログ出力実装
例えばこんな感じにコントローラーにログが仕込んであるとします。
ログはファサードで出力する必要があります。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class HogeController extends Controller
{
public function index(Request $request)
{
Log::info('開始');
$num = intval($request->num);
if (10 < $num) {
Log::error('大きすぎ!');
}
Log::info('終了');
return response()->json(['num' => $num]);
}
}
ログ出力のテスト
テスト開始時にファサードのspyを実行しておきます。
spyを使うことでメソッドの実行をテストすることができます。
| shouldHaveReceived | メソッドが実行することをテスト |
|---|---|
| shouldNotHaveReceived | メソッドが実行されないことをテスト |
メソッドの引数もテストすることができます。
shouldHaveReceivedは第二引数に指定するか、withをメソッドチェーンで繋げます。
shouldNotHaveReceivedは第二引数の指定のみです。
先ほど作成したコントローラーのテストコードを書いてみましょう。
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Support\Facades\Log;
class HogeTest extends TestCase
{
/**
* @test
*/
public function ログテスト()
{
$spy = Log::spy();
$this->getJson('/hoge?num=10');
$spy->shouldHaveReceived('info', ['開始']);
$spy->shouldNotHaveReceived('error', ['大きすぎ!']);
$spy->shouldHaveReceived('info')->with('終了');
}
}
spyはMockeryの機能で、その他にもいろいろ機能がありますので詳しくはドキュメントを確認ください。
Mockery Docs
