imanghafoori/eloquent-mockery
Allows you to design your tests in an independent manner.
636,375
127
| Install | |
|---|---|
composer require imanghafoori/eloquent-mockery |
|
| Latest Version: | v0.2.48 |
| PHP: | ^7.2|^8.0 |
| License: | MIT |
| Last Updated: | Feb 23, 2025 |
| Links: | GitHub · Packagist |
Maintainer: imanghafoori1
Eloquent Mockery
Mock your eloquent queries without the repository pattern.
Why this package was invented?
- It solves the problem of "slow tests" by removing the interactions with a real database.
- It simplifies the process of writing and running tests since your tests will be "DB Independent".
Installation
You can install the package via Composer:
composer require imanghafoori/eloquent-mockery --dev dev-main
Usage:
First, you have to define a new connection in your config/database.php and set the driver to 'arrayDB'.
<?php
return [
...
'connections' => [
'my_test_connection' => [
'driver' => 'arrayDB',
'database' => '',
],
...
],
...
]
Then you can:
public function test_basic()
{
config()->set('database.default', 'my_test_connection');
# ::Arrange:: (Setup Sample Data)
FakeDB::addRow('users', ['id' => 1, 'username' => 'faky', 'password' => '...']);
FakeDB::addRow('users', ['id' => 1, 'username' => 'maky', 'password' => '...']);
# ::Act:: (This query resides in your controller)
$user = User::where('username', 'faky')->first(); # <=== This does NOT connect to a real DB.
# ::Assert::
$this->assert($user->id === 1);
$this->assert($user->username === 'faky');
}
Mocking a create query:
public function test_basic()
{
# In setUp:
FakeDB::mockEloquentBuilder();
# ::Act::
$this->post('/create-url', ['some' => 'data' ])
# ::Assert::
$user = User::first();
$this->assertEquals('iman', $user->username);
# In tearDown
FakeDB::dontMockEloquentBuilder();
}
- For more examples take a look at the
testsdirectory.
License
The MIT License (MIT). Please see License File for more information.
:raising_hand: Contributing
If you find an issue or have a better way to do something, feel free to open an issue, or a pull request.
:exclamation: Security
If you discover any security-related issues, please email imanghafoori1@gmail.com instead of using the issue tracker.