حتی سیستم لاگ گرفتن برنامه‌ی لاراولیت رو تست کن :)

حتی سیستم لاگ گرفتن برنامه‌ی لاراولیت رو تست کن :)

اخیرا داشتم برای یکی از پروژه‌هایی که روش کار می‌کنم  تست می‌نوشتم که با این چالش روبه‌رو شدم که لاراول برای سیستم لاگ‌گیریش مثل بقیه‌ی 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

بریم پروژه‌هامون رو تست کنیم. 🔬

نظرات
اگر login نکردی برامون ایمیلت رو بنویس: