اخیرا داشتم برای یکی از پروژههایی که روش کار میکنم تست مینوشتم که با این چالش روبهرو شدم که لاراول برای سیستم لاگگیریش مثل بقیهی facadeهاش (Event, Bus, ...) متد fake نداره. با یکم گشتن توی اینترنت یک پکیج محبوب رو پیدا کردم که تست نوشتن برای لاگها رو مثل آبخوردن، آسون کرده. پکیج log-fake ناجی تست نویسی برای لاگ!
کافیه توی متدهای تستون این کد رو داشته باشید:
<?php
use TiMacDonald\Log\LogFake;
use Illuminate\Support\Facades\Log;
//...
Log::swap(new LogFake);
//...
حالا میتونید از assertionهای فوقالعادهی اون استفاده کنید. تست لاگ روی channelها یا stackهای مختلف به راحتی در دسترس شماست.
چند تا نمونه از اون رو میتونید توی بلاک کد زیر ببینید:
<?php
use TiMacDonald\Log\LogFake;
use Illuminate\Support\Facades\Log;
//...
Log::swap(new LogFake);
Log::assertLogged('info');
Log::channel('slack')->assertLogged('alert');
Log::stack(['bugsnag', 'sentry'])->assertLogged('critical');
// with a callback
Log::assertLogged('info', function ($message, $context) {
return Str::contains($message, 'Donuts');
});
Log::channel('slack')->assertLogged('alert', function ($message, $context) {
return Str::contains($message, '5pm');
});
Log::stack(['bugsnag', 'sentry'])->assertLogged('critical', function ($message, $context) {
return Str::contains($message, 'evasive maneuvers');
});
مستند این پکیج خیلی خوبه. حتما یه سر بهش بزنید.
https://github.com/timacdonald/log-fake
بریم پروژههامون رو تست کنیم. 🔬