This guide is not testing package itself, but is a guide to haw you can write tests for filter classes.
Consider we have a User model with 2 type of filter: SearchFilter and StatusFilter :
<?php
namespace App\Filters\User;
use EleFilter\Database\ModelFilter
class StatusFilter extends ModelFilter
{
protected $column = 'email_verified_at';
public function active()
{
$this->notNull();
}
public function deactive()
{
$this->null();
}
}
<?php
namespace App\Filters\User;
use EleFilter\Database\ModelFilter
class SearchFilter extends ModelFilter
{
public function apply($search)
{
$this->builder->where('email' , 'like' ,
"%$search%");
}
}
Let's start writing test for SeachFilter first, the examples are in pest testing package , there is no much difference in phpunit.
First create UserFilterTest.php. Your test methods for search can be something like this:
<?php
use App\Models\User;
it('can search', function({
$user = User::filter(['search' => 'test']);
$expecetd_sql = 'select * from "users" where "email" like
?';
expected($user->toSql())->toBe($expecetd_sql)
->and($user->getBindings())->toBe(['%test%'])
});
For status methods testing continue like this :
<?php
use App\Models\User;
it('can filter active users', function({
$user = User::filter(['status' => 'active']);
$expecetd_sql = 'select * from "users" where
"email_verified_at" is not null';
expected($user->toSql())->toBe($expecetd_sql);
});
it('can filter deactive users', function({
$user = User::filter(['status' => 'deactive']);
$expecetd_sql = 'select * from "users" where
"email_verified_at" is null';
expected($user->toSql())->toBe($expecetd_sql);
});
© 2025 elefilter