alexrili / lumen-test-booster
just a small boost of lumen tests
Installs: 34 070
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- codeception/aspect-mock: ^3.0
This package is auto-updated.
Last update: 2024-10-22 07:59:20 UTC
README
Just a small abstraction of lumen test with aspectmock and handler excpetion.
Install
# Install in dev mode
composer require alexrili/lumen-test-booster --dev
how to use
First of all, you need to make sure you have the Stubs
folder inside your high level test
folder.
Name your clone classes
as YourClassNameStub and put them inside a Stubs
folder
tests\
Stubs\
ClassYouWantToCloneStub
Import LumenTestBooster as a trait
in your high level TestCase class.
use \LumenTestBooster;
// ... abstract class TestCase extends Base { use \LumenTestBooster; // ... }
How to clone/mock your tests
Just ovewriter the setUp
method and call $this->stubClasses()
method to stub/mock your classes
Make sure you have, a
Stubs
folder inside yourtest
high level folder.
// ... public function setUp(): void { $this->stubClasses([ClassYourWantToMock::class]); parent::setUp(); } // ...
Use case
1st case scenario.
Let's say you have a class name NotificationService and you want to mock/stub this class.
First of all you need to create a NotificationServiceStub inside a tests/Stubs/
folder.
After this, you just call $this->stubClasses([ClassYourWantToMock::class]);
inside your setUp
method.
And That's It.
Don't forget to import
LumenTestBooster
in yourTestCase
class.
tests\
Stubs\
NotificationServiceStub.php
// ... public function setUp(): void { $this->stubClasses([NotificationService::class]); parent::setUp(); } // ...
2st case scenario. But, if you want to test some different returns of a method? Eg. you need to test a error return.
tests\
Stubs\
NotificationServiceStub.php
Inside your StubClass(in this case NotificationServiceStub), you will create a
sendEmailNotificationError()
method. In this case you can disable exception handler by call$this->withoutShowingExceptions()
// ... /** @test */ public function should_return_erro_when_consumer_doesnt_have_an_email() { $this->doubleMethod(NotificationService::class, 'sendEmailNotification') ->setReturn(NotificationServiceStub::class, "sendEmailNotificationError"); } // ...
Other configs
You can change exception handlers to not showing/handler in runtime. Say you have a specific test you want to return an error.
// ... /** @test */ public function should_return_error() { $this->withoutShowingExceptions(); // ... } // ...
You also can change the default set of stub paths.
This config must be put inside you high level test case class.
// ... /** * setup before class function * * @return void */ public static function setUpBeforeClass(): void { self::initAspectMock( [ 'appDir' => '/', // root directory of your aplication. 'debug' => true, // to get debug details 'includePaths' => [__DIR__ . '/api/app', '/common'], // you can put how many folders you want to be maped here. 'cacheDir' => __DIR__ . '../storage/cache/__tests_ // place where you 'mocked/stub' class are runing. ]); parent::setUpBeforeClass(); } // ...
Thanks!
@GMBN (the goldenboy) @cadukiz