кодесурса
«Laravel

Laravel (5.7) HTTP-тесты

script1adsense2code
script1adsense3code

Вступление

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

<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/');
        $response->assertStatus(200);
    }
}

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

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

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

<?php
class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $response = $this->withHeaders([
            'X-Header' => 'Value',
        ])->json('POST', '/user', ['name' => 'Sally']);
        $response
            ->assertStatus(201)
            ->assertJson([
                'created' => true,
            ]);
    }

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

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

<?php
class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $response = $this->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

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

<?php
use App\User;
class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $user = factory(User::class)->create();
        $response = $this->actingAs($user)
                         ->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

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

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

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

Laravel также предоставляет вам несколько помощников для тестирования API-интерфейсов JSON и их ответов. Например, методы json, get, post, put, patch и delete могут использоваться для выдачи запросов с различными HTTP-глаголами. Вы также можете легко передавать данные и заголовки в эти методы. Для начала давайте напишем тест, чтобы сделать запрос POST для / user и утверждать, что ожидаемые данные были возвращены:

<?php
class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $response = $this->json('POST', '/user', ['name' => 'Sally']);
        $response
            ->assertStatus(201)
            ->assertJson([
                'created' => true,
            ]);
    }
}

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

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

<?php
class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $response = $this->json('POST', '/user', ['name' => 'Sally']);
        $response
            ->assertStatus(201)
            ->assertExactJson([
                'created' => true,
            ]);
    }
}

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

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

<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class ExampleTest extends TestCase
{
    public function testAvatarUpload()
    {
        Storage::fake('avatars');
        $file = UploadedFile::fake()->image('avatar.jpg');
        $response = $this->json('POST', '/avatar', [
            'avatar' => $file,
        ]);
        // Assert the file was stored...
        Storage::disk('avatars')->assertExists($file->hashName());
        // Assert a file does not exist...
        Storage::disk('avatars')->assertMissing('missing.jpg');
    }
}

Поддельные настройки файла

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

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

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

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

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

Ответные утверждения

Laravel предоставляет вам множество пользовательских методов подтверждения для ваших тестов PHPUnit. К этим утверждениям можно получить доступ в ответе, который возвращается из методов тестирования json, get, post, put и delete:

название Описание Код
assertCookie Это подтверждает, что ответ содержит данный файл cookie: $ response-> assertCookie ($ cookieName, $ value = null);
assertCookieExpired Это подтверждает, что в ответе содержится данный файл cookie и срок его действия истек: $ Response-> assertCookieExpired ($ cookieName);
assertCookieNotExpired Это подтверждает, что в ответе содержится данный файл cookie, и срок его действия не истек: $ Response-> assertCookieNotExpired ($ cookieName);
assertCookieMissing Это подтверждает, что ответ не содержит данный файл cookie: $ Response-> assertCookieMissing ($ cookieName);
assertDontSee Это утверждает, что данная строка не содержится в ответе: $ Response-> assertDontSee ($ значение);
assertDontSeeText Это подтверждает, что данная строка не содержится в тексте ответа: $ Response-> assertDontSeeText ($ значение);
assertExactJson Это подтверждает, что ответ содержит точное соответствие данных JSON: $ response-> assertExactJson (массив $ data);
assertForbidden Это утверждает, что ответ имеет запрещенный код состояния: $ Response-> assertForbidden ();
assertHeader Это подтверждает, что данный заголовок присутствует в ответе: $ response-> assertHeader ($ headerName, $ value = null);
assertHeaderMissing Это утверждает, что данный заголовок отсутствует в ответе: $ Response-> assertHeaderMissing ($ HeaderName);
assertJson Это подтверждает, что ответ содержит данные JSON: $ response-> assertJson (массив $ data);
assertJsonCount Это утверждает, что ответ JSON имеет массив с ожидаемым количеством элементов в данном ключе: $ response-> assertJsonCount ($ count, $ key = null);
assertJsonFragment Это подтверждает, что ответ содержит данный фрагмент JSON: $ response-> assertJsonFragment (массив $ data);
assertJsonMissing Это подтверждает, что ответ не содержит данный фрагмент JSON: $ response-> assertJsonMissing (массив $ data);
assertJsonMissingExact Это утверждает, что ответ не содержит точный фрагмент JSON: $ response-> assertJsonMissingExact (массив $ data);
assertJsonMissingValidationErrors Это подтверждает, что в ответе нет ошибок проверки JSON для данных ключей: $ Response-> assertJsonMissingValidationErrors ($ ключей);
assertJsonStructure Это подтверждает, что ответ имеет заданную структуру JSON: $ response-> assertJsonStructure (array $ structure);
assertJsonValidationErrors Это подтверждает, что в ответе указаны ошибки проверки JSON для указанных ключей: $ Response-> assertJsonValidationErrors ($ ключей);
assertLocation Таким образом, утверждает, что ответ имеет заданное значение URI в заголовке Location: $ Response-> assertLocation ($ URI);
assertNotFound Это подтверждает, что ответ имеет не найденный код состояния: $ Response-> assertNotFound ();
assertOk Это утверждает, что ответ имеет 200 кодов состояния: $ Response-> assertOk ();
assertPlainCookie Это подтверждает, что ответ содержит указанный файл cookie (незашифрованный): $ response-> assertPlainCookie ($ cookieName, $ value = null);
assertRedirect Это подтверждает, что ответ является перенаправлением на заданный URI: $ Response-> assertRedirect ($ URI);
assertSee Это подтверждает, что данная строка содержится в ответе: $ Response-> assertSee ($ значение);
assertSeeInOrder Это подтверждает, что указанные строки содержатся в порядке в ответе: $ response-> assertSeeInOrder (массив $ values);
assertSeeText Это подтверждает, что данная строка содержится в тексте ответа: $ Response-> assertSeeText ($ значение);
assertSeeTextInOrder Это подтверждает, что указанные строки содержатся в порядке в тексте ответа: $ response-> assertSeeTextInOrder (массив $ values);
assertSessionHas Это подтверждает, что сеанс содержит данный фрагмент данных: $ response-> assertSessionHas ($ key, $ value = null);
assertSessionHasAll Это подтверждает, что у сеанса есть заданный список значений: $ response-> assertSessionHasAll (массив $ data);
assertSessionHasErrors Это подтверждает, что сеанс содержит ошибку для данного поля: $ response-> assertSessionHasErrors (массив $ keys, $ format = null, $ errorBag = 'default' ');
assertSessionHasErrorsIn Это утверждает, что сеанс имеет данные ошибки: $ response-> assertSessionHasErrorsIn ($ errorBag, $ keys = [], $ format = null);
assertSessionHasNoErrors Это утверждает, что сеанс не имеет ошибок: $ Response-> assertSessionHasNoErrors ();
assertSessionDoesntHaveErrors Это утверждает, что у сеанса нет ошибок для данных ключей: $ response-> assertSessionDoesntHaveErrors ($ keys = [], $ format = null, $ errorBag = 'default');
assertSessionMissing Это утверждает, что сеанс не содержит данный ключ: $ Response-> assertSessionMissing ($ ключ);
assertStatus Это утверждает, что ответ имеет заданный код: $ Response-> assertStatus ($ код);
assertSuccessful Это подтверждает, что ответ имеет успешный код состояния: $ Response-> assertSuccessful ();
assertViewHas Это подтверждает, что представлению ответа был предоставлен фрагмент данных: $ response-> assertViewHas ($ key, $ value = null);
assertViewHasAll Это утверждает, что представление ответа имеет заданный список данных: $ response-> assertViewHasAll (массив $ data);
assertViewIs Это подтверждает, что данный вид был возвращен маршрутом: $ Response-> assertViewIs ($ значение);
assertViewMissing Это подтверждает, что в представлении ответа отсутствует часть связанных данных: $ Response-> assertViewMissing ($ ключ);

Утверждения аутентификации

Laravel предоставляет различные проверки подлинности для наших тестов PHPUnit

метод Описание
$ this-> assertAuthenticated ($ guard = null); Утверждает, что пользователь аутентифицирован.
$ this-> assertGuest ($ guard = null); Утверждает, что пользователь не аутентифицирован.
$ this-> assertAuthenticatedAs ($ user, $ guard = null); Утверждает, что данный пользователь аутентифицирован.
$ this-> assertCredentials (массив $ credentials, $ guard = null); Утверждают, что данные учетные данные действительны.
$ this-> assertInvalidCredentials (массив $ credentials, $ guard = null); Утверждают, что данные учетные данные являются недействительными.

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code