laravel zttp 用法
$response = Zttp::withHeaders(['Fancy' => 'Pants'])->post($url, [
'foo' => 'bar',
'baz' => 'qux',
]);
$response->json();
$response = Zttp::asFormParams()->post($url, [
'foo' => 'bar',
'baz' => 'qux',
]);
$response = Zttp::patch($this->url('/patch'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$response = Zttp::delete($this->url('/delete'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$response = Zttp::accept('banana/sandwich')->post($url);
$response = Zttp::withoutRedirecting()->get($url);
zttp tests.php file 几个简单使用案例:
<?php
use Zttp\Zttp;
use PHPUnit\Framework\TestCase;
class ZttpTest extends TestCase
{
public static function setUpBeforeClass()
{
ZttpServer::start();
}
function url($url)
{
return vsprintf('%s/%s', [
'http://localhost:' . getenv('TEST_SERVER_PORT'),
ltrim($url, '/'),
]);
}
/** @test */
function query_parameters_can_be_passed_as_an_array()
{
$response = Zttp::get($this->url('/get'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'query' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function query_parameters_in_urls_are_respected()
{
$response = Zttp::get($this->url('/get?foo=bar&baz=qux'));
$this->assertArraySubset([
'query' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function query_parameters_in_urls_can_be_combined_with_array_parameters()
{
$response = Zttp::get($this->url('/get?foo=bar'), [
'baz' => 'qux'
]);
$this->assertArraySubset([
'query' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function post_content_is_json_by_default()
{
$response = Zttp::post($this->url('/post'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'headers' => [
'content-type' => ['application/json'],
],
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function post_content_can_be_sent_as_form_params()
{
$response = Zttp::asFormParams()->post($this->url('/post'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'headers' => [
'content-type' => ['application/x-www-form-urlencoded'],
],
'form_params' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function post_content_can_be_sent_as_json_explicitly()
{
$response = Zttp::asJson()->post($this->url('/post'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'headers' => [
'content-type' => ['application/json'],
],
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function get_with_additional_headers()
{
$response = Zttp::withHeaders(['Custom' => 'Header'])->get($this->url('/get'));
$this->assertArraySubset([
'headers' => [
'custom' => ['Header'],
],
], $response->json());
}
/** @test */
function post_with_additional_headers()
{
$response = Zttp::withHeaders(['Custom' => 'Header'])->post($this->url('/post'));
$this->assertArraySubset([
'headers' => [
'custom' => ['Header'],
],
], $response->json());
}
/** @test */
function the_accept_header_can_be_set_via_shortcut()
{
$response = Zttp::accept('banana/sandwich')->post($this->url('/post'));
$this->assertArraySubset([
'headers' => [
'accept' => ['banana/sandwich'],
],
], $response->json());
}
/** @test */
function exceptions_are_not_thrown_for_40x_responses()
{
$response = Zttp::withHeaders(['Z-Status' => 418])->get($this->url('/get'));
$this->assertEquals(418, $response->status());
}
/** @test */
function exceptions_are_not_thrown_for_50x_responses()
{
$response = Zttp::withHeaders(['Z-Status' => 508])->get($this->url('/get'));
$this->assertEquals(508, $response->status());
}
/** @test */
function redirects_are_followed_by_default()
{
$response = Zttp::get($this->url('/redirect'));
$this->assertEquals(200, $response->status());
$this->assertEquals('Redirected!', $response->body());
}
/** @test */
function redirects_can_be_disabled()
{
$response = Zttp::withoutRedirecting()->get($this->url('/redirect'));
$this->assertEquals(302, $response->status());
$this->assertEquals($this->url('/redirected'), $response->header('Location'));
}
/** @test */
function patch_requests_are_supported()
{
$response = Zttp::patch($this->url('/patch'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function put_requests_are_supported()
{
$response = Zttp::put($this->url('/put'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function delete_requests_are_supported()
{
$response = Zttp::delete($this->url('/delete'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function query_parameters_are_respected_in_post_requests()
{
$response = Zttp::post($this->url('/post?banana=sandwich'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'query' => [
'banana' => 'sandwich',
],
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function query_parameters_are_respected_in_put_requests()
{
$response = Zttp::put($this->url('/put?banana=sandwich'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'query' => [
'banana' => 'sandwich',
],
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function query_parameters_are_respected_in_patch_requests()
{
$response = Zttp::patch($this->url('/patch?banana=sandwich'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'query' => [
'banana' => 'sandwich',
],
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function query_parameters_are_respected_in_delete_requests()
{
$response = Zttp::delete($this->url('/delete?banana=sandwich'), [
'foo' => 'bar',
'baz' => 'qux',
]);
$this->assertArraySubset([
'query' => [
'banana' => 'sandwich',
],
'json' => [
'foo' => 'bar',
'baz' => 'qux',
]
], $response->json());
}
/** @test */
function can_retrieve_the_raw_response_body()
{
$response = Zttp::get($this->url('/simple-response'));
$this->assertEquals("A simple string response", $response->body());
}
/** @test */
function can_retrieve_response_header_values()
{
$response = Zttp::get($this->url('/get'));
$this->assertEquals('application/json', $response->header('Content-Type'));
}
/** @test */
function can_check_if_a_response_is_success()
{
$response = Zttp::withHeaders(['Z-Status' => 200])->get($this->url('/get'));
$this->assertTrue($response->isSuccess());
$this->assertFalse($response->isRedirect());
$this->assertFalse($response->isClientError());
$this->assertFalse($response->isServerError());
}
/** @test */
function can_check_if_a_response_is_redirect()
{
$response = Zttp::withHeaders(['Z-Status' => 302])->get($this->url('/get'));
$this->assertTrue($response->isRedirect());
$this->assertFalse($response->isSuccess());
$this->assertFalse($response->isClientError());
$this->assertFalse($response->isServerError());
}
/** @test */
function can_check_if_a_response_is_client_error()
{
$response = Zttp::withHeaders(['Z-Status' => 404])->get($this->url('/get'));
$this->assertTrue($response->isClientError());
$this->assertFalse($response->isSuccess());
$this->assertFalse($response->isRedirect());
$this->assertFalse($response->isServerError());
}
/** @test */
function can_check_if_a_response_is_server_error()
{
$response = Zttp::withHeaders(['Z-Status' => 508])->get($this->url('/get'));
$this->assertTrue($response->isServerError());
$this->assertFalse($response->isSuccess());
$this->assertFalse($response->isRedirect());
$this->assertFalse($response->isClientError());
}
}
class ZttpServer
{
static function start()
{
$pid = exec('php -S ' . 'localhost:' . getenv('TEST_SERVER_PORT') . ' -t ./tests/server/public > /dev/null 2>&1 & echo $!');
while (@file_get_contents('http://localhost:' . getenv('TEST_SERVER_PORT') . '/get') === false) {
usleep(1000);
}
register_shutdown_function(function () use ($pid) {
exec('kill ' . $pid);
});
}
}
要求:PHP>7.0 PHPUNIT>=6.0
One thought on “laravel zttp 用法”
很好