Testing your filters

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