Skip to content

Mock your eloquent queries without the repository pattern

License

Notifications You must be signed in to change notification settings

gosuperscript/eloquent-mockery

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eloquent Mockery

Mock your eloquent queries without the repository pattern.

Required Laravel Version Required PHP Version tests Software License

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

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()
{
    # ::Arrange::
    FakeDB::mockEloquentBuilder();

    # ::Act::
    // In your controller:
    // $user = User::create(['username' => 'iman', 'email' => '[email protected]']);   # <=== This does NOT connect to DB.
    $this->post('/create-url', ['some' => 'data' ])

    // ::Assert::
    $user = User::first();
    $this->assertEquals('iman', $user->username);
    
    FakeDB::dontMockEloquentBuilder();
}
  • For more examples take a look at the tests directory.

License

The MIT License (MIT). Please see License File for more information.

🙋 Contributing

If you find an issue or have a better way to do something, feel free to open an issue, or a pull request.

❗ Security

If you discover any security-related issues, please email [email protected] instead of using the issue tracker.

About

Mock your eloquent queries without the repository pattern

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%