Идёт обновление сайта. Несколько дней возможны сбои в оформлении и переводах. Документация работает — если страница выглядит сломанной, обновите её позже.

Документация
L Laravel L intervention/image
Войти
Главная Laravel 10.x HTTP-тесты

HTTP-тесты

10.x 7 мар 2026 г.

#Введение

Laravel предоставляет очень удобный API для выполнения HTTP-запросов к вашему приложению и проверки ответов. Например, посмотрите на определённый ниже функциональный тест:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового теста.
     */
    public function test_the_application_returns_a_successful_response(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

Метод get выполняет GET-запрос к приложению, а метод assertStatus проверяет, что возвращённый ответ имеет указанный HTTP-статус. Помимо этого простого утверждения, Laravel содержит множество других утверждений для проверки заголовков ответа, содержимого, структуры JSON и прочего.

#Выполнение запросов

Для выполнения запроса к вашему приложению вы можете вызвать методы get, post, put, patch или delete в вашем тесте. Эти методы не выполняют «реальный» HTTP-запрос к приложению. Вместо этого весь сетевой запрос симулируется внутри.

Вместо возвращения экземпляра Illuminate\Http\Response, методы тестовых запросов возвращают экземпляр Illuminate\Testing\TestResponse, который предоставляет множество полезных утверждений для проверки ответов вашего приложения:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового теста.
     */
    public function test_a_basic_request(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

В общем случае каждый ваш тест должен выполнять только один запрос к приложению. Неожиданное поведение может возникнуть, если в одном методе теста выполняется несколько запросов.

Примечание

Для удобства CSRF middleware автоматически отключается при выполнении тестов.

#Настройка заголовков запроса

Вы можете использовать метод withHeaders для настройки заголовков запроса перед отправкой в приложение. Этот метод позволяет добавить любые пользовательские заголовки к запросу:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового функционального теста.
     */
    public function test_interacting_with_headers(): void
    {
        $response = $this->withHeaders([
            'X-Header' => 'Value',
        ])->post('/user', ['name' => 'Sally']);

        $response->assertStatus(201);
    }
}

#Cookies

Вы можете использовать методы withCookie или withCookies для установки значений cookies перед выполнением запроса. Метод withCookie принимает имя и значение cookie в качестве двух аргументов, а withCookies — массив пар имя/значение:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_interacting_with_cookies(): void
    {
        $response = $this->withCookie('color', 'blue')->get('/');

        $response = $this->withCookies([
            'color' => 'blue',
            'name' => 'Taylor',
        ])->get('/');
    }
}

#Сессия / Аутентификация

Laravel предоставляет несколько помощников для работы с сессией во время HTTP-тестирования. Во-первых, вы можете установить данные сессии в виде массива с помощью метода withSession. Это полезно для загрузки данных в сессию перед выполнением запроса к приложению:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_interacting_with_the_session(): void
    {
        $response = $this->withSession(['banned' => false])->get('/');
    }
}

Сессия Laravel обычно используется для хранения состояния текущего аутентифицированного пользователя. Поэтому метод-помощник actingAs предоставляет простой способ аутентифицировать заданного пользователя как текущего. Например, можно использовать model factory для создания и аутентификации пользователя:

<?php

namespace Tests\Feature;

use App\Models\User;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_an_action_that_requires_authentication(): void
    {
        $user = User::factory()->create();

        $response = $this->actingAs($user)
                         ->withSession(['banned' => false])
                         ->get('/');
    }
}

Вы также можете указать, какой guard должен использоваться для аутентификации данного пользователя, передав имя guard в качестве второго аргумента методу actingAs. Guard, переданный в actingAs, станет guard по умолчанию на время выполнения теста:

$this->actingAs($user, 'web')

#Отладка ответов

После выполнения тестового запроса к вашему приложению вы можете использовать методы dump, dumpHeaders и dumpSession для просмотра и отладки содержимого ответа:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового теста.
     */
    public function test_basic_test(): void
    {
        $response = $this->get('/');

        $response->dumpHeaders();

        $response->dumpSession();

        $response->dump();
    }
}

В качестве альтернативы вы можете использовать методы dd, ddHeaders и ddSession для вывода информации об ответе с последующей остановкой выполнения:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового теста.
     */
    public function test_basic_test(): void
    {
        $response = $this->get('/');

        $response->ddHeaders();

        $response->ddSession();

        $response->dd();
    }
}

#Обработка исключений

Иногда может потребоваться проверить, что ваше приложение выбрасывает определённое исключение. Чтобы исключение не было перехвачено обработчиком исключений Laravel и не возвращалось как HTTP-ответ, вы можете вызвать метод withoutExceptionHandling перед выполнением запроса:

$response = $this->withoutExceptionHandling()->get('/');

Кроме того, если вы хотите убедиться, что ваше приложение не использует устаревшие функции PHP или библиотек, вы можете вызвать метод withoutDeprecationHandling перед выполнением запроса. При отключённой обработке устареваний предупреждения будут преобразованы в исключения, что приведёт к провалу теста:

$response = $this->withoutDeprecationHandling()->get('/');

Метод assertThrows можно использовать для проверки, что код внутри переданного замыкания выбрасывает исключение указанного типа:

$this->assertThrows(
    fn () => (new ProcessOrder)->execute(),
    OrderInvalid::class
);

#Тестирование JSON API

Laravel также предоставляет несколько помощников для тестирования JSON API и их ответов. Например, методы json, getJson, postJson, putJson, patchJson, deleteJson и optionsJson могут использоваться для выполнения JSON-запросов с разными HTTP-методами. Вы также можете легко передавать данные и заголовки этим методам. Для начала напишем тест, который выполнит POST-запрос к /api/user и проверит, что возвращён ожидаемый JSON:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового функционального теста.
     */
    public function test_making_an_api_request(): void
    {
        $response = $this->postJson('/api/user', ['name' => 'Sally']);

        $response
            ->assertStatus(201)
            ->assertJson([
                'created' => true,
            ]);
    }
}

Кроме того, данные JSON-ответа могут быть доступны как элементы массива в ответе, что удобно для проверки отдельных значений, возвращённых в JSON:

$this->assertTrue($response['created']);
Примечание

Метод assertJson преобразует ответ в массив и использует PHPUnit::assertArraySubset для проверки, что указанный массив присутствует в JSON-ответе, возвращённом приложением. Поэтому, если в JSON-ответе есть другие свойства, тест всё равно пройдёт, если данный фрагмент присутствует.

#Проверка точного совпадения JSON

Как уже упоминалось, метод assertJson проверяет наличие фрагмента JSON в ответе. Если вы хотите убедиться, что данный массив точно совпадает с JSON, возвращённым вашим приложением, используйте метод assertExactJson:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового функционального теста.
     */
    public function test_asserting_an_exact_json_match(): void
    {
        $response = $this->postJson('/user', ['name' => 'Sally']);

        $response
            ->assertStatus(201)
            ->assertExactJson([
                'created' => true,
            ]);
    }
}

#Проверка по JSON-путям

Если вы хотите проверить, что JSON-ответ содержит указанные данные по заданному пути, используйте метод assertJsonPath:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Пример базового функционального теста.
     */
    public function test_asserting_a_json_paths_value(): void
    {
        $response = $this->postJson('/user', ['name' => 'Sally']);

        $response
            ->assertStatus(201)
            ->assertJsonPath('team.owner.name', 'Darian');
    }
}

Метод assertJsonPath также принимает замыкание, которое можно использовать для динамической проверки, должна ли пройти проверка:

$response->assertJsonPath('team.owner.name', fn (string $name) => strlen($name) >= 3);

#Флюентное тестирование JSON

Laravel также предлагает удобный способ флюентного тестирования JSON-ответов вашего приложения. Для начала передайте замыкание методу assertJson. Это замыкание будет вызвано с экземпляром Illuminate\Testing\Fluent\AssertableJson, который можно использовать для утверждений по возвращённому JSON. Метод where позволяет делать утверждения по конкретному атрибуту JSON, а метод missing — проверять отсутствие атрибута:

use Illuminate\Testing\Fluent\AssertableJson;

/**
 * Пример базового функционального теста.
 */
public function test_fluent_json(): void
{
    $response = $this->getJson('/users/1');

    $response
        ->assertJson(fn (AssertableJson $json) =>
            $json->where('id', 1)
                 ->where('name', 'Victoria Faith')
                 ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com'))
                 ->whereNot('status', 'pending')
                 ->missing('password')
                 ->etc()
        );
}

#Понимание метода etc

В приведённом примере вы могли заметить вызов метода etc в конце цепочки утверждений. Этот метод сообщает Laravel, что в JSON-объекте могут присутствовать и другие атрибуты. Если метод etc не используется, тест провалится, если в JSON-объекте есть атрибуты, по которым не было сделано утверждений.

Цель такого поведения — защитить вас от случайного раскрытия чувствительной информации в JSON-ответах, заставляя либо явно делать утверждение по атрибуту, либо явно разрешать дополнительные атрибуты через метод etc.

Однако учтите, что отсутствие метода etc в вашей цепочке утверждений не гарантирует, что дополнительные атрибуты не добавляются в массивы, вложенные в ваш JSON-объект. Метод etc гарантирует только, что дополнительных атрибутов нет на том уровне вложенности, в котором был вызван etc.

#Проверка наличия / отсутствия атрибутов

Для проверки наличия или отсутствия атрибута используйте методы has и missing:

$response->assertJson(fn (AssertableJson $json) =>
    $json->has('data')
         ->missing('message')
);

Кроме того, методы hasAll и missingAll позволяют одновременно проверять наличие или отсутствие нескольких атрибутов:

$response->assertJson(fn (AssertableJson $json) =>
    $json->hasAll(['status', 'data'])
         ->missingAll(['message', 'code'])
);

Вы можете использовать метод hasAny, чтобы проверить, что хотя бы один из указанных атрибутов присутствует:

$response->assertJson(fn (AssertableJson $json) =>
    $json->has('status')
         ->hasAny('data', 'message', 'code')
);

#Проверка JSON-коллекций

Часто ваш маршрут возвращает JSON-ответ, содержащий несколько элементов, например, несколько пользователей:

Route::get('/users', function () {
    return User::all();
});

В таких случаях можно использовать метод has объекта fluent JSON для проверки пользователей в ответе. Например, проверим, что JSON-ответ содержит трёх пользователей. Затем сделаем утверждения по первому пользователю в коллекции с помощью метода first. Метод first принимает замыкание, которое получает другой объект AssertableJson для проверки первого объекта в JSON-коллекции:

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has(3)
             ->first(fn (AssertableJson $json) =>
                $json->where('id', 1)
                     ->where('name', 'Victoria Faith')
                     ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com'))
                     ->missing('password')
                     ->etc()
             )
    );

#Ограничение области утверждений для JSON-коллекций

Иногда маршруты вашего приложения возвращают JSON-коллекции с именованными ключами:

Route::get('/users', function () {
    return [
        'meta' => [...],
        'users' => User::all(),
    ];
})

При тестировании таких маршрутов вы можете использовать метод has для проверки количества элементов в коллекции. Кроме того, метод has можно использовать для ограничения области цепочки утверждений:

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has('meta')
             ->has('users', 3)
             ->has('users.0', fn (AssertableJson $json) =>
                $json->where('id', 1)
                     ->where('name', 'Victoria Faith')
                     ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com'))
                     ->missing('password')
                     ->etc()
             )
    );

Однако вместо двух отдельных вызовов метода has для проверки коллекции users вы можете сделать один вызов с передачей замыкания в качестве третьего параметра. В этом случае замыкание будет автоматически вызвано и ограничено первым элементом коллекции:

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has('meta')
             ->has('users', 3, fn (AssertableJson $json) =>
                $json->where('id', 1)
                     ->where('name', 'Victoria Faith')
                     ->where('email', fn (string $email) => str($email)->is('victoria@gmail.com'))
                     ->missing('password')
                     ->etc()
             )
    );

#Проверка типов JSON

Возможно, вы захотите проверить, что свойства в JSON-ответе имеют определённый тип. Класс Illuminate\Testing\Fluent\AssertableJson предоставляет методы whereType и whereAllType для этой цели:

$response->assertJson(fn (AssertableJson $json) =>
    $json->whereType('id', 'integer')
         ->whereAllType([
            'users.0.name' => 'string',
            'meta' => 'array'
        ])
);

Вы можете указать несколько типов через символ | или передать массив типов вторым параметром методу whereType. Утверждение будет успешным, если значение ответа соответствует любому из указанных типов:

$response->assertJson(fn (AssertableJson $json) =>
    $json->whereType('name', 'string|null')
         ->whereType('id', ['string', 'integer'])
);

Методы whereType и whereAllType распознают следующие типы: string, integer, double, boolean, array и null.

#Тестирование загрузки файлов

Класс Illuminate\Http\UploadedFile предоставляет метод fake, который можно использовать для генерации фиктивных файлов или изображений для тестирования. В сочетании с методом fake фасада Storage это значительно упрощает тестирование загрузки файлов. Например, вы можете использовать эти возможности для тестирования формы загрузки аватара:

<?php

namespace Tests\Feature;

use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_avatars_can_be_uploaded(): void
    {
        Storage::fake('avatars');

        $file = UploadedFile::fake()->image('avatar.jpg');

        $response = $this->post('/avatar', [
            'avatar' => $file,
        ]);

        Storage::disk('avatars')->assertExists($file->hashName());
    }
}

Если вы хотите проверить, что файл отсутствует, используйте метод assertMissing фасада Storage:

Storage::fake('avatars');

// ...

Storage::disk('avatars')->assertMissing('missing.jpg');

#Настройка фиктивных файлов

При создании файлов с помощью метода fake класса UploadedFile вы можете указать ширину, высоту и размер изображения (в килобайтах) для более точного тестирования правил валидации вашего приложения:

UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);

Кроме создания изображений, вы можете создавать файлы любого другого типа с помощью метода create:

UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);

При необходимости вы можете передать аргумент $mimeType в метод, чтобы явно указать MIME-тип файла:

UploadedFile::fake()->create(
    'document.pdf', $sizeInKilobytes, 'application/pdf'
);

#Тестирование представлений

Laravel также позволяет рендерить представление без выполнения симулированного HTTP-запроса к приложению. Для этого вы можете вызвать метод view в вашем тесте. Метод view принимает имя представления и необязательный массив данных. Он возвращает экземпляр Illuminate\Testing\TestView, который предоставляет несколько методов для удобного утверждения содержимого представления:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_a_welcome_view_can_be_rendered(): void
    {
        $view = $this->view('welcome', ['name' => 'Taylor']);

        $view->assertSee('Taylor');
    }
}

Класс TestView предоставляет следующие методы утверждений: assertSee, assertSeeInOrder, assertSeeText, assertSeeTextInOrder, assertDontSee и assertDontSeeText.

При необходимости вы можете получить необработанное, отрендеренное содержимое представления, приведя экземпляр TestView к строке:

$contents = (string) $this->view('welcome');

#Совместное использование ошибок

Некоторые представления могут зависеть от ошибок, доступных в глобальном наборе ошибок, предоставляемом Laravel. Чтобы заполнить набор ошибок сообщениями, используйте метод withViewErrors:

$view = $this->withViewErrors([
    'name' => ['Пожалуйста, укажите корректное имя.']
])->view('form');

$view->assertSee('Пожалуйста, укажите корректное имя.');

#Рендеринг Blade и компонентов

При необходимости вы можете использовать метод blade для оценки и рендеринга сырой строки Blade. Как и метод view, метод blade возвращает экземпляр Illuminate\Testing\TestView:

$view = $this->blade(
    '<x-component :name="$name" />',
    ['name' => 'Taylor']
);

$view->assertSee('Taylor');

Вы можете использовать метод component для оценки и рендеринга Blade-компонента. Метод component возвращает экземпляр Illuminate\Testing\TestComponent:

$view = $this->component(Profile::class, ['name' => 'Taylor']);

$view->assertSee('Taylor');

#Доступные утверждения

#Утверждения для ответов

Класс Illuminate\Testing\TestResponse Laravel предоставляет множество пользовательских методов утверждений, которые вы можете использовать при тестировании вашего приложения. Эти утверждения доступны на ответе, возвращаемом методами тестирования json, get, post, put и delete:

<style> .collection-method-list > p { columns: 14.4em 2; -moz-columns: 14.4em 2; -webkit-columns: 14.4em 2; } .collection-method-list a { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } </style>

#assertBadRequest

Проверяет, что ответ имеет HTTP статус код "плохой запрос" (400):

$response->assertBadRequest();

#assertAccepted

Проверяет, что ответ имеет HTTP статус код "принято" (202):

$response->assertAccepted();

#assertConflict

Проверяет, что ответ имеет HTTP статус код "конфликт" (409):

$response->assertConflict();

#assertCookie

Проверяет, что ответ содержит указанный cookie:

$response->assertCookie($cookieName, $value = null);

#assertCookieExpired

Проверяет, что ответ содержит указанный cookie и он истёк:

$response->assertCookieExpired($cookieName);

#assertCookieNotExpired

Проверяет, что ответ содержит указанный cookie и он не истёк:

$response->assertCookieNotExpired($cookieName);

#assertCookieMissing

Проверяет, что ответ не содержит указанный cookie:

$response->assertCookieMissing($cookieName);

#assertCreated

Проверяет, что ответ имеет HTTP статус код 201:

$response->assertCreated();

#assertDontSee

Проверяет, что указанная строка отсутствует в ответе приложения. Эта проверка автоматически экранирует строку, если не передать второй аргумент false:

$response->assertDontSee($value, $escaped = true);

#assertDontSeeText

Проверяет, что указанная строка отсутствует в тексте ответа. Эта проверка автоматически экранирует строку, если не передать второй аргумент false. Перед проверкой содержимое ответа пропускается через функцию PHP strip_tags:

$response->assertDontSeeText($value, $escaped = true);

#assertDownload

Проверяет, что ответ является "загрузкой". Обычно это означает, что маршрут вернул ответ Response::download, BinaryFileResponse или Storage::download:

$response->assertDownload();

Если нужно, можно проверить, что загружаемому файлу присвоено указанное имя:

$response->assertDownload('image.jpg');

#assertExactJson

Проверяет, что ответ содержит точное совпадение с указанными JSON-данными:

$response->assertExactJson(array $data);

#assertForbidden

Проверяет, что ответ имеет HTTP статус код "запрещено" (403):

$response->assertForbidden();

#assertFound

Проверяет, что ответ имеет HTTP статус код "найдено" (302):

$response->assertFound();

#assertGone

Проверяет, что ответ имеет HTTP статус код "удалено" (410):

$response->assertGone();

#assertHeader

Проверяет, что в ответе присутствует указанный заголовок с заданным значением:

$response->assertHeader($headerName, $value = null);

#assertHeaderMissing

Проверяет, что указанный заголовок отсутствует в ответе:

$response->assertHeaderMissing($headerName);

#assertInternalServerError

Проверяет, что ответ имеет HTTP статус код "внутренняя ошибка сервера" (500):

$response->assertInternalServerError();

#assertJson

Проверяет, что ответ содержит указанные JSON-данные:

$response->assertJson(array $data, $strict = false);

Метод assertJson преобразует ответ в массив и использует PHPUnit::assertArraySubset для проверки, что указанный массив присутствует в JSON-ответе приложения. Таким образом, если в JSON есть другие свойства, тест всё равно пройдет, если заданный фрагмент присутствует.

#assertJsonCount

Проверяет, что в JSON-ответе по указанному ключу находится массив с ожидаемым количеством элементов:

$response->assertJsonCount($count, $key = null);

#assertJsonFragment

Проверяет, что ответ содержит указанные JSON-данные где-либо в ответе:

Route::get('/users', function () {
    return [
        'users' => [
            [
                'name' => 'Taylor Otwell',
            ],
        ],
    ];
});

$response->assertJsonFragment(['name' => 'Taylor Otwell']);

#assertJsonIsArray

Проверяет, что JSON-ответ является массивом:

$response->assertJsonIsArray();

#assertJsonIsObject

Проверяет, что JSON-ответ является объектом:

$response->assertJsonIsObject();

#assertJsonMissing

Проверяет, что ответ не содержит указанные JSON-данные:

$response->assertJsonMissing(array $data);

#assertJsonMissingExact

Проверяет, что ответ не содержит точное совпадение с указанными JSON-данными:

$response->assertJsonMissingExact(array $data);

#assertJsonMissingValidationErrors

Проверяет, что в ответе отсутствуют JSON ошибки валидации для указанных ключей:

$response->assertJsonMissingValidationErrors($keys);
Примечание

Более общий метод assertValid можно использовать для проверки, что в ответе нет ошибок валидации, возвращённых в JSON, и что ошибки не были сохранены в сессии.

#assertJsonPath

Проверяет, что ответ содержит указанные данные по заданному пути:

$response->assertJsonPath($path, $expectedValue);

Например, если ваше приложение возвращает следующий JSON-ответ:

{
    "user": {
        "name": "Steve Schoger"
    }
}

Вы можете проверить, что свойство name объекта user соответствует заданному значению следующим образом:

$response->assertJsonPath('user.name', 'Steve Schoger');

#assertJsonMissingPath

Проверяет, что ответ не содержит указанный путь:

$response->assertJsonMissingPath($path);

Например, если ваше приложение возвращает следующий JSON-ответ:

{
    "user": {
        "name": "Steve Schoger"
    }
}

Вы можете проверить, что он не содержит свойство email объекта user:

$response->assertJsonMissingPath('user.email');

#assertJsonStructure

Проверяет, что ответ имеет заданную JSON-структуру:

$response->assertJsonStructure(array $structure);

Например, если JSON-ответ вашего приложения содержит следующие данные:

{
    "user": {
        "name": "Steve Schoger"
    }
}

Вы можете проверить, что структура JSON соответствует вашим ожиданиям следующим образом:

$response->assertJsonStructure([
    'user' => [
        'name',
    ]
]);

Иногда JSON-ответы вашего приложения могут содержать массивы объектов:

{
    "user": [
        {
            "name": "Steve Schoger",
            "age": 55,
            "location": "Earth"
        },
        {
            "name": "Mary Schoger",
            "age": 60,
            "location": "Earth"
        }
    ]
}

В этом случае можно использовать символ * для проверки структуры всех объектов в массиве:

$response->assertJsonStructure([
    'user' => [
        '*' => [
             'name',
             'age',
             'location'
        ]
    ]
]);

#assertJsonValidationErrors

Проверяет, что ответ содержит указанные JSON ошибки валидации для заданных ключей. Этот метод следует использовать при проверке ответов, где ошибки валидации возвращаются в виде JSON-структуры, а не сохраняются в сессии:

$response->assertJsonValidationErrors(array $data, $responseKey = 'errors');
Примечание

Более общий метод assertInvalid можно использовать для проверки, что ответ содержит ошибки валидации, возвращённые в JSON, или что ошибки были сохранены в сессии.

#assertJsonValidationErrorFor

Проверяет, что ответ содержит любую JSON ошибку валидации для указанного ключа:

$response->assertJsonValidationErrorFor(string $key, $responseKey = 'errors');

#assertMethodNotAllowed

Проверяет, что ответ имеет HTTP статус код "метод не разрешён" (405):

$response->assertMethodNotAllowed();

#assertMovedPermanently

Проверяет, что ответ имеет HTTP статус код "перемещено навсегда" (301):

$response->assertMovedPermanently();

#assertLocation

Проверяет, что в заголовке Location ответа содержится указанное URI:

$response->assertLocation($uri);

#assertContent

Проверяет, что указанная строка совпадает с содержимым ответа:

$response->assertContent($value);

#assertNoContent

Проверяет, что ответ имеет указанный HTTP статус код и не содержит содержимого:

$response->assertNoContent($status = 204);

#assertStreamedContent

Проверяет, что указанная строка совпадает с потоковым содержимым ответа:

$response->assertStreamedContent($value);

#assertNotFound

Проверяет, что ответ имеет HTTP статус код "не найдено" (404):

$response->assertNotFound();

#assertOk

Проверяет, что ответ имеет HTTP статус код 200:

$response->assertOk();

#assertPaymentRequired

Проверяет, что ответ имеет HTTP статус код "требуется оплата" (402):

$response->assertPaymentRequired();

#assertPlainCookie

Проверяет, что ответ содержит указанный незашифрованный cookie:

$response->assertPlainCookie($cookieName, $value = null);

#assertRedirect

Проверяет, что ответ является редиректом на указанный URI:

$response->assertRedirect($uri = null);

#assertRedirectContains

Проверяет, что ответ перенаправляет на URI, содержащий указанную строку:

$response->assertRedirectContains($string);

#assertRedirectToRoute

Проверяет, что ответ является редиректом на указанный именованный маршрут:

$response->assertRedirectToRoute($name, $parameters = []);

#assertRedirectToSignedRoute

Проверяет, что ответ является редиректом на указанный подписанный маршрут:

$response->assertRedirectToSignedRoute($name = null, $parameters = []);

#assertRequestTimeout

Проверяет, что ответ имеет HTTP статус код "время ожидания запроса истекло" (408):

$response->assertRequestTimeout();

#assertSee

Проверяет, что указанная строка содержится в ответе. Эта проверка автоматически экранирует строку, если не передать второй аргумент false:

$response->assertSee($value, $escaped = true);

#assertSeeInOrder

Проверяет, что указанные строки содержатся в ответе в заданном порядке. Эта проверка автоматически экранирует строки, если не передать второй аргумент false:

$response->assertSeeInOrder(array $values, $escaped = true);

#assertSeeText

Проверяет, что указанная строка содержится в тексте ответа. Эта проверка автоматически экранирует строку, если не передать второй аргумент false. Содержимое ответа перед проверкой пропускается через функцию PHP strip_tags:

$response->assertSeeText($value, $escaped = true);

#assertSeeTextInOrder

Проверяет, что указанные строки содержатся в тексте ответа в заданном порядке. Эта проверка автоматически экранирует строки, если не передать второй аргумент false. Содержимое ответа перед проверкой пропускается через функцию PHP strip_tags:

$response->assertSeeTextInOrder(array $values, $escaped = true);

#assertServerError

Проверяет, что ответ имеет HTTP статус код ошибки сервера (>= 500 и < 600):

$response->assertServerError();

#assertServiceUnavailable

Проверяет, что ответ имеет HTTP статус код "служба недоступна" (503):

$response->assertServiceUnavailable();

#assertSessionHas

Проверяет, что сессия содержит указанные данные:

$response->assertSessionHas($key, $value = null);

При необходимости в качестве второго аргумента методу assertSessionHas можно передать замыкание. Проверка пройдет, если замыкание вернет true:

$response->assertSessionHas($key, function (User $value) {
    return $value->name === 'Taylor Otwell';
});

#assertSessionHasInput

Проверяет, что сессия содержит указанное значение в флеш-массиве input:

$response->assertSessionHasInput($key, $value = null);

При необходимости в качестве второго аргумента методу assertSessionHasInput можно передать замыкание. Проверка пройдет, если замыкание вернет true:

use Illuminate\Support\Facades\Crypt;

$response->assertSessionHasInput($key, function (string $value) {
    return Crypt::decryptString($value) === 'secret';
});

#assertSessionHasAll

Проверяет, что сессия содержит указанный массив пар ключ/значение:

$response->assertSessionHasAll(array $data);

Например, если в сессии вашего приложения есть ключи name и status, вы можете проверить, что оба существуют и имеют указанные значения следующим образом:

$response->assertSessionHasAll([
    'name' => 'Taylor Otwell',
    'status' => 'active',
]);

#assertSessionHasErrors

Проверяет, что сессия содержит ошибку для указанных $keys. Если $keys — ассоциативный массив, проверяется, что сессия содержит конкретное сообщение об ошибке (значение) для каждого поля (ключа). Этот метод следует использовать при тестировании маршрутов, которые сохраняют ошибки валидации в сессии, а не возвращают их в JSON:

$response->assertSessionHasErrors(
    array $keys = [], $format = null, $errorBag = 'default'
);

Например, чтобы проверить, что поля name и email имеют сообщения об ошибках валидации, сохранённые в сессии, вызовите метод assertSessionHasErrors так:

$response->assertSessionHasErrors(['name', 'email']);

Или можно проверить, что для конкретного поля есть определённое сообщение об ошибке:

$response->assertSessionHasErrors([
    'name' => 'The given name was invalid.'
]);
Примечание

Более общий метод assertInvalid можно использовать для проверки, что ответ содержит ошибки валидации, возвращённые в JSON, или что ошибки были сохранены в сессии.

#assertSessionHasErrorsIn

Проверяет, что сессия содержит ошибку для указанных $keys в конкретном error bag. Если $keys — ассоциативный массив, проверяется, что сессия содержит конкретное сообщение об ошибке (значение) для каждого поля (ключа) в этом error bag:

$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);

#assertSessionHasNoErrors

Проверяет, что в сессии отсутствуют ошибки валидации:

$response->assertSessionHasNoErrors();

#assertSessionDoesntHaveErrors

Проверяет, что в сессии отсутствуют ошибки валидации для указанных ключей:

$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');
Примечание

Более общий метод assertValid можно использовать для проверки, что в ответе нет ошибок валидации, возвращённых в JSON, и что ошибки не были сохранены в сессии.

#assertSessionMissing

Проверяет, что сессия не содержит указанный ключ:

$response->assertSessionMissing($key);

#assertStatus

Проверяет, что ответ имеет указанный HTTP статус код:

$response->assertStatus($code);

#assertSuccessful

Проверяет, что ответ имеет успешный HTTP статус код (>= 200 и < 300):

$response->assertSuccessful();

#assertTooManyRequests

Проверяет, что ответ имеет HTTP статус код "слишком много запросов" (429):

$response->assertTooManyRequests();

#assertUnauthorized

Проверяет, что ответ имеет HTTP статус код "неавторизован" (401):

$response->assertUnauthorized();

#assertUnprocessable

Проверяет, что ответ имеет HTTP статус код "необрабатываемый" (422):

$response->assertUnprocessable();

#assertUnsupportedMediaType

Проверяет, что ответ имеет HTTP статус код "неподдерживаемый тип медиа" (415):

$response->assertUnsupportedMediaType();

#assertValid

Проверяет, что в ответе отсутствуют ошибки валидации для указанных ключей. Этот метод можно использовать для проверки ответов, где ошибки валидации возвращаются в JSON-структуре или были сохранены в сессии:

// Проверить, что ошибок валидации нет...
$response->assertValid();

// Проверить, что для указанных ключей нет ошибок валидации...
$response->assertValid(['name', 'email']);

#assertInvalid

Проверяет, что ответ содержит ошибки валидации для указанных ключей. Этот метод можно использовать для проверки ответов, где ошибки валидации возвращаются в JSON-структуре или были сохранены в сессии:

$response->assertInvalid(['name', 'email']);

Также можно проверить, что для указанного ключа есть конкретное сообщение об ошибке валидации. При этом можно указать полное сообщение или его часть:

$response->assertInvalid([
    'name' => 'The name field is required.',
    'email' => 'valid email address',
]);

#assertViewHas

Проверяет, что в представлении ответа содержится указанный фрагмент данных:

$response->assertViewHas($key, $value = null);

Передача замыкания в качестве второго аргумента метода assertViewHas позволяет проверить и сделать утверждения относительно конкретного элемента данных представления:

$response->assertViewHas('user', function (User $user) {
    return $user->name === 'Taylor';
});

Кроме того, данные представления могут быть доступны как элементы массива в ответе, что позволяет удобно их проверять:

$this->assertEquals('Taylor', $response['name']);

#assertViewHasAll

Проверяет, что в представлении ответа присутствует указанный список данных:

$response->assertViewHasAll(array $data);

Этот метод можно использовать для проверки, что представление содержит данные с указанными ключами:

$response->assertViewHasAll([
    'name',
    'email',
]);

Или можно проверить, что данные представления присутствуют и имеют конкретные значения:

$response->assertViewHasAll([
    'name' => 'Taylor Otwell',
    'email' => 'taylor@example.com,',
]);

#assertViewIs

Проверяет, что указанный view был возвращён маршрутом:

$response->assertViewIs($value);

#assertViewMissing

Проверяет, что указанный ключ данных не был передан в представление, возвращённое в ответе приложения:

$response->assertViewMissing($key);

#Проверки аутентификации

Laravel также предоставляет различные проверки, связанные с аутентификацией, которые вы можете использовать в функциональных тестах вашего приложения. Обратите внимание, что эти методы вызываются непосредственно в тестовом классе, а не на экземпляре Illuminate\Testing\TestResponse, возвращаемом методами вроде get и post.

#assertAuthenticated

Проверяет, что пользователь аутентифицирован:

$this->assertAuthenticated($guard = null);

#assertGuest

Проверяет, что пользователь не аутентифицирован:

$this->assertGuest($guard = null);

#assertAuthenticatedAs

Проверяет, что аутентифицирован конкретный пользователь:

$this->assertAuthenticatedAs($user, $guard = null);

#Проверки валидации

Laravel предоставляет два основных метода для проверки валидации, которые позволяют убедиться, что данные в вашем запросе были либо корректными, либо некорректными.

#assertValid

Проверяет, что в ответе отсутствуют ошибки валидации для указанных ключей. Этот метод можно использовать для проверки ответов, где ошибки валидации возвращаются в формате JSON или были сохранены в сессии:

// Проверить, что ошибок валидации нет...
$response->assertValid();

// Проверить, что для указанных ключей нет ошибок валидации...
$response->assertValid(['name', 'email']);

#assertInvalid

Проверяет, что в ответе присутствуют ошибки валидации для указанных ключей. Этот метод можно использовать для проверки ответов, где ошибки валидации возвращаются в формате JSON или были сохранены в сессии:

$response->assertInvalid(['name', 'email']);

Также можно проверить, что для конкретного ключа присутствует определённое сообщение об ошибке валидации. При этом можно указать полное сообщение или его часть:

$response->assertInvalid([
    'name' => 'The name field is required.',
    'email' => 'valid email address',
]);