Package Data | |
---|---|
Maintainer Username: | alexrili |
Maintainer Contact: | alexrili@gmail.com (alexrili) |
Package Create Date: | 2019-09-20 |
Package Last Update: | 2019-11-21 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2025-03-04 03:06:57 |
Package Statistics | |
---|---|
Total Downloads: | 34,509 |
Monthly Downloads: | 88 |
Daily Downloads: | 0 |
Total Stars: | 3 |
Total Watchers: | 1 |
Total Forks: | 0 |
Total Open Issues: | 0 |
Just a small abstraction of lumen test with aspectmock and handler excpetion.
# Install in dev mode
composer require alexrili/php-easy-test --dev
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;
// ...
}
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();
}
// ...
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");
}
// ...
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();
}
// ...
@GMBN (the goldenboy) @cadukiz