Метод put
Метод put применяется к тестовому экземпляру приложения
и выполняет PUT-запрос к указанному URL. Первым параметром
передаётся путь, вторым - массив данных запроса, третьим -
массив заголовков. Метод возвращает экземпляр TestResponse,
который содержит ответ сервера.
Синтаксис
<?php
$response = $this->put($uri, $data, $headers);
?>
Пример
Давайте обновим статью с идентификатором 1:
<?php
namespace Tests\Feature;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_update_article()
{
$article = Article::create([
'title' => 'Old title',
'content' => 'Old content',
'status' => 'draft'
]);
$data = [
'title' => 'New title',
'content' => 'Updated content',
'status' => 'published'
];
$res = $this->put("/api/articles/{$article->id}", $data);
$res->assertOk();
$res->assertJsonPath('title', 'New title');
}
}
?>
Пример
Давайте отправим PUT-запрос с заголовками:
<?php
namespace Tests\Feature;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_update_with_headers()
{
$article = Article::create([
'title' => 'Article title',
'content' => 'Article content',
'status' => 'draft'
]);
$data = [
'title' => 'Updated title',
'content' => 'Updated content'
];
$headers = [
'X-Custom-Header' => 'CustomValue',
'Accept' => 'application/json'
];
$res = $this->put(
"/api/articles/{$article->id}",
$data,
$headers
);
$res->assertOk();
$res->assertJsonPath('status', 'draft');
}
}
?>
Пример
Давайте проверим валидацию при обновлении статьи:
<?php
namespace Tests\Feature;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_update_validation_fails()
{
$article = Article::create([
'title' => 'Valid title',
'content' => 'Valid content',
'status' => 'draft'
]);
$data = [
'title' => '',
'content' => 'Content without title'
];
$res = $this->put("/api/articles/{$article->id}", $data);
$res->assertUnprocessable();
$res->assertJsonValidationErrors(['title']);
}
}
?>