Метод patch
Метод patch применяется в тестовых классах Laravel
для отправки PATCH-запросов на указанный URL. Первым параметром
передаётся путь к маршруту, вторым - массив данных для обновления,
третьим - массив заголовков (необязательно). Метод возвращает
объект тестового ответа, который можно использовать для проверок.
Синтаксис
<?php
$this->patch($url, $data, $headers);
?>
Пример
Давайте отправим PATCH-запрос на обновление статьи с id равным 1:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_update_article()
{
$article = Article::create([
'name' => 'article',
'text' => 'content',
'integer' => 1,
'boolean' => false,
]);
$data = [
'name' => 'updated article',
'text' => 'new content',
];
$res = $this->patch("/api/articles/{$article->id}", $data);
$res->assertStatus(200);
}
}
?>
Результат выполнения кода:
"PATCH request completed successfully"
Пример
Давайте отправим PATCH-запрос с заголовками авторизации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserTest extends TestCase
{
use RefreshDatabase;
public function test_update_user_with_token()
{
$user = User::create([
'name' => 'user',
'email' => 'user@example.com',
'password' => bcrypt('password'),
]);
$token = $user->createToken('auth_token')->plainTextToken;
$headers = [
'Authorization' => "Bearer {$token}",
'Accept' => 'application/json',
];
$data = [
'name' => 'updated user',
];
$res = $this->patch("/api/users/{$user->id}", $data, $headers);
$res->assertStatus(200)
->assertJson(['name' => 'updated user']);
}
}
?>
Результат выполнения кода:
"User updated successfully"
Пример
Давайте проверим ответ при частичном обновлении ресурса:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Post;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PostTest extends TestCase
{
use RefreshDatabase;
public function test_partial_update_post()
{
$post = Post::create([
'title' => 'post',
'body' => 'content',
'status' => 'draft',
]);
$data = [
'status' => 'published',
];
$res = $this->patch("/api/posts/{$post->id}", $data);
$res->assertStatus(200)
->assertJson([
'id' => $post->id,
'title' => 'post',
'body' => 'content',
'status' => 'published',
]);
}
}
?>
Результат выполнения кода:
["id" => 1, "title" => "post", "body" => "content", "status" => "published"]
Пример
Давайте проверим обработку ошибок валидации при PATCH-запросе:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Product;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ValidationTest extends TestCase
{
use RefreshDatabase;
public function test_update_product_with_invalid_data()
{
$product = Product::create([
'name' => 'product',
'price' => 100,
'quantity' => 10,
]);
$data = [
'price' => -10,
];
$res = $this->patch("/api/products/{$product->id}", $data);
$res->assertStatus(422)
->assertJsonValidationErrors(['price']);
}
}
?>
Результат выполнения кода:
"Validation error: price must be greater than zero"