Easily test your Laravel middleware classes. Blog post: http://blog.stidges.com/post/testing-your-laravel-middleware
<?php | |
namespace Tests; | |
use Illuminate\Foundation\Testing\TestResponse; | |
use Illuminate\Foundation\Testing\TestCase as BaseTestCase; | |
use PHPUnit\Framework\Assert; | |
abstract class TestCase extends BaseTestCase | |
{ | |
use CreatesApplication; | |
/** | |
* Setup the test environment. | |
* | |
* @return void | |
*/ | |
protected function setUp() | |
{ | |
parent::setUp(); | |
TestResponse::macro('assertMiddlewarePassed', function () { | |
Assert::assertEquals('__passed__', $this->content()); | |
}); | |
} | |
/** | |
* Call the given middleware. | |
* | |
* @param string|string[] $middleware | |
* @param string $method | |
* @param array $data | |
* @return \Illuminate\Foundation\Testing\TestResponse | |
*/ | |
protected function callMiddleware($middleware, $method = 'GET', array $data = []) | |
{ | |
return $this->call( | |
$method, $this->makeMiddlewareRoute($method, $middleware), $data | |
); | |
} | |
/** | |
* Call the given middleware using a JSON request. | |
* | |
* @param string|string[] $middleware | |
* @param string $method | |
* @param array $data | |
* @return \Illuminate\Foundation\Testing\TestResponse | |
*/ | |
protected function callMiddlewareJson($middleware, $method = 'GET', array $data = []) | |
{ | |
return $this->json( | |
$method, $this->makeMiddlewareRoute($method, $middleware), $data | |
); | |
} | |
/** | |
* Make a dummy route with the given middleware applied. | |
* | |
* @param string $method | |
* @param string|string[] $middleware | |
* @return string | |
*/ | |
protected function makeMiddlewareRoute($method, $middleware) | |
{ | |
$method = strtolower($method); | |
return $this->app->make('router')->{$method}('/__middleware__', [ | |
'middleware' => $middleware, | |
function () { | |
return '__passed__'; | |
} | |
])->uri(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment