Spec-Zone.ru › CodeIgniter 4

Тестирование возможностей HTTP

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

  • Класс теста
  • Запрос страницы
    • Настройка различных маршрутов
    • Настройка значений сессии
    • Настройка заголовков
    • Пропуск событий
    • Форматирование запроса
    • Установка тела
  • Проверка ответа

Класс теста

Для тестирования возможностей необходимо, чтобы все ваши классы тестов использовали атрибуты CodeIgniter\Test\DatabaseTestTrait и CodeIgniter\Test\FeatureTestTrait. Поскольку эти инструменты тестирования полагаются на надлежащую подготовку базы данных, вы всегда должны убеждаться, что вызываются parent::setUp() и parent::tearDown(), если вы реализуете свои собственные методы.

<?php

namespace App;

use CodeIgniter\Test\DatabaseTestTrait;
use CodeIgniter\Test\FeatureTestTrait;

class TestFoo extends CIUnitTestCase
{
    use DatabaseTestTrait, FeatureTestTrait;

    protected function setUp(): void
    {
        parent::setUp();

        $this->myClassMethod();
    }

    protected function tearDown(): void
    {
        parent::tearDown();

        $this->anotherClassMethod();
    }
}

Запрос страницы

По сути, тесты возможностей просто позволяют вам вызвать точку входа вашего приложения и получить результаты обратно. Для этого вы используете метод call(). Первый параметр — HTTP-метод, который нужно использовать (чаще всего GET или POST). Второй параметр — путь на вашем сайте для тестирования. Третий параметр принимает массив, который используется для заполнения суперглобальных переменных для используемого HTTP-глагола. Таким образом, для метода GET будет заполняться переменная $_GET, а для запроса POST — массив $_POST.

// Get a simple page
$result = $this->call('get', '/');

// Submit a form
$result = $this->call('post', 'contact'), [
    'name'  => 'Fred Flintstone',
    'email' => 'flintyfred@example.com'
]);

Для каждого HTTP-глагола существуют сокращенные методы, чтобы упростить ввод и сделать вещи более понятными:

$this->get($path, $params);
$this->post($path, $params);
$this->put($path, $params);
$this->patch($path, $params);
$this->delete($path, $params);
$this->options($path, $params);

Примечание

Массив $params не имеет смысла для каждого HTTP-глагола, но включен для согласованности.

Настройка различных маршрутов

Вы можете использовать пользовательский набор маршрутов, передав массив «маршрутов» в метод withRoutes(). Это переопределит любые существующие маршруты в системе:

$routes = [
    ['get', 'users', 'UserController::list'],
];

$result = $this->withRoutes($routes)->get('users');

Каждый из «маршрутов» представляет собой массив из 3 элементов, содержащий HTTP-глагол (или «add» для всех), URI для сопоставления и пункт назначения маршрутизации.

Настройка значений сессии

Вы можете установить пользовательские значения сессии для использования во время одного теста с помощью метода withSession(). Это принимает массив пар ключ/значение, которые должны существовать в переменной $_SESSION при выполнении этого запроса, или null` to indicate that the current values of ``$_SESSION. Это полезно для тестирования аутентификации и т. д.

$values = [
    'logged_in' => 123,
];

$result = $this->withSession($values)->get('admin');

// Or...

$_SESSION['logged_in'] = 123;

$result = $this->withSession()->get('admin');

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

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

$headers = [
    'CONTENT_TYPE' => 'application/json',
];

$result = $this->withHeaders($headers)->post('users');

Пропуск событий

События полезны для использования в вашем приложении, но могут быть проблематичными во время тестирования. Особенно события, используемые для отправки электронных писем. Вы можете сказать системе пропустить обработку любого события с помощью метода skipEvents():

$result = $this->skipEvents()->post('users', $userInfo);

Форматирование запроса

Вы можете установить формат тела вашего запроса, используя метод withBodyFormat(). В настоящее время он поддерживает либо json , либо xml . Это примет параметры, переданные в call(), post(), get()..., и назначит их телу запроса в заданном формате. Это также установит заголовок Content-Type для вашего запроса соответственно. Это полезно при тестировании API JSON или XML, так как вы можете задать запрос в виде, ожидаемом контроллером.

// If your feature test contains this:
$result = $this->withBodyFormat('json')->post('users', $userInfo);

// Your controller can then get the parameters passed in with:
$userInfo = $this->request->getJson();

Установка тела

Вы можете установить тело вашего запроса с помощью метода withBody(). Это позволяет вам форматировать тело так, как вам нужно. Рекомендуется использовать его, если у вас есть более сложные XML для тестирования. Также он не установит для вас заголовок Content-Type, поэтому, если вам он нужен, вы можете установить его с помощью метода withHeaders().

Проверка ответа

FeatureTestTrait::call() возвращает экземпляр TestResponse. См. Тестирование ответов, как использовать этот класс для выполнения дополнительных утверждений и проверок в ваших тестовых случаях.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/testing/feature.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API