Using test tools like Laravel in Mezzio (Expressive) unit tests.
使用类似Laravel的测试工具在 Mezzio (Expressive) 的单元测试中.
Install via composer.
composer require zfegg/expressive-test --devuse Psr\Http\Message\ResponseInterface;
use Zfegg\ExpressiveTest\AbstractActionTestCase;
class HomePageTest extends AbstractActionTestCase {
public function testHome() {
$response = $this->runApp(
'POST',
'/?test=1',
['body' => '2'],
['HTTP_CONTENT_TYPE' => 'application/json'],
'{"a":"b"}',
['cookie' => '3']
);
$this->assertInstanceOf(ResponseInterface::class, $response);
}
public function testPassMiddlewareOrMockService() {
$this->container->setService('some middleware', new PassMiddleware());
$mock = $this->createMock(SomeService::class);
$this->container->setService('mock some service', $mock);
$response = $this->runApp(
'POST',
'/?test=1',
['body' => '2'],
['HTTP_CONTENT_TYPE' => 'application/json'],
'{"a":"b"}',
['cookie' => '3']
);
$this->assertInstanceOf(ResponseInterface::class, $response);
}
}use Psr\Http\Message\ResponseInterface;
use Zfegg\ExpressiveTest\AbstractActionTestCase;
class HomePageTest extends AbstractActionTestCase {
public function testHome() {
/*
$this->get($uri, $headers = []);
$this->getJson($uri, $headers = []);
$this->post($uri, $data = [], $headers = []);
$this->postJson($uri, $data = [], $headers = []);
$this->put($uri, $data = [], $headers = []);
$this->putJson($uri, $data = [], $headers = []);
$this->patch($uri, $data = [], $headers = []);
$this->patchJson($uri, $data = [], $headers = []);
$this->delete($uri, $data = [], $headers = []);
$this->json($method, $uri, $data = [], $headers = []);
$this->call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null);
*/
$response = $this->getJson('/?test=1');
$response->assertOk();
$response->assertSuccessful();
}
public function testRedirectLogin() {
$response = $this->getJson('/redirect');
$response->assertRedirect('/login');
}
}get($uri, $headers = [])getJson($uri, $headers = [])post($uri, $data = [], $headers = [])postJson($uri, $data = [], $headers = [])put($uri, $data = [], $headers = [])putJson($uri, $data = [], $headers = [])patch($uri, $data = [], $headers = [])patchJson($uri, $data = [], $headers = [])delete($uri, $data = [], $headers = [])json($method, $uri, $data = [], $headers = [])call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
assertCookieassertCookieExpiredassertCookieMissingassertCookieNotExpiredassertCreatedassertDontSeeassertDontSeeTextassertExactJsonassertForbiddenassertHeaderassertHeaderMissingassertJsonassertJsonCountassertJsonMessageassertJsonMissingassertJsonMissingExactassertJsonPathassertJsonStructureassertLocationassertNoContentassertNotFoundassertOkassertRedirectassertSeeassertSeeTextassertStatusassertSuccessfulassertUnauthorized
For pass a middleware. As default it will pass ErrorHandler::class.
use Psr\Http\Message\ResponseInterface;
use Zfegg\ExpressiveTest\AbstractActionTestCase;
use Zfegg\ExpressiveTest\PassMiddleware;
class HomePageTest extends AbstractActionTestCase {
public function testHome() {
// Pass a authentication middleware.
$this->container->setService(AuthenticationMiddleware::class, PassMiddleware::class);
$response = $this->getJson('/api/users');
$response->assertOk();
}
}