Prueba de funciones HTTP

Las pruebas de funciones le permiten ver los resultados de una sola llamada a su aplicación. Esto podría estar devolviendo el resultados de un único formulario web, acceso a un punto final API y más. Esto es útil porque le permite probar todo el ciclo de vida de una sola solicitud, garantizar que el enrutamiento funcione, que la respuesta tenga el formato correcto, analizar los resultados, y más.

La clase de prueba

Las pruebas de funciones requieren que todas sus clases de prueba utilicen Higgs\Test\DatabaseTestTrait y rasgos Higgs\Test\FeatureTestTrait. Dado que estas herramientas de prueba dependen de una base de datos adecuada preparación, siempre debe asegurarse de que parent::setUp() y parent::tearDown() se llaman si implementa sus propios métodos.

<?php

namespace Tests\Feature;

use Higgs\Test\CIUnitTestCase;
use Higgs\Test\DatabaseTestTrait;
use Higgs\Test\FeatureTestTrait;

class FooTest extends CIUnitTestCase
{
    use DatabaseTestTrait;
    use FeatureTestTrait;

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

        $this->myClassMethod();
    }

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

        $this->anotherClassMethod();
    }
}

Solicitar una página

Básicamente, las pruebas de funciones simplemente le permiten llamar a un punto final en su aplicación y obtener los resultados. Para hacer esto, utiliza el método call().

  1. El primer parámetro es el método HTTP a utilizar (más frecuentemente GET o POST).

  2. El segundo parámetro es la ruta URI en su sitio para probar.

  3. El tercer parámetro $params acepta una matriz que se utiliza para completar el variables superglobales para el verbo HTTP que está utilizando. Entonces, un método de GET tendría la variable $_GET completa, mientras que una solicitud POST tener la matriz $_POST poblada. El $params también se utiliza en función-formato-de-la-solicitud.

    Nota

    The $params array does not make sense for every HTTP verb, but is incluido para mayor coherencia.

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

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

Métodos taquigráficos

Existen métodos abreviados para cada uno de los verbos HTTP para facilitar la escritura y aclarar las cosas:

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

Establecer diferentes rutas

Puede utilizar una colección personalizada de rutas pasando una serie de «rutas» al método withRoutes(). Esta voluntad anular cualquier ruta existente en el sistema:

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

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

Cada una de las «rutas» es una matriz de 3 elementos que contiene el verbo HTTP (o «agregar» para todas), el URI que debe coincidir y el destino de enrutamiento.

Configuración de valores de sesión

Puede establecer valores de sesión personalizados para usar durante una sola prueba con el método withSession(). Esto requiere una matriz de pares clave/valor que deben existir dentro de la variable $_SESSION cuando se realiza esta solicitud, o null para indicar que se deben utilizar los valores actuales de $_SESSION. Esto es útil para probar la autenticación y más.

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

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

// Or...

$_SESSION['logged_in'] = 123;

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

Configuración de encabezados

Puede establecer valores de encabezado con el método withHeaders(). Esto requiere una serie de pares clave/valor que serían pasado como encabezado en la llamada:

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

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

Omitir eventos

Los eventos son útiles para usar en su aplicación, pero pueden resultar problemáticos durante las pruebas. Especialmente eventos que se utilizan. para enviar correos electrónicos. Puedes decirle al sistema que omita cualquier manejo de eventos con el método skipEvents():

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

Formatear la solicitud

Puede configurar el formato del cuerpo de su solicitud utilizando el método withBodyFormat(). Actualmente esto admite json o xml. Esto es útil al probar API JSON o XML para poder configurar la solicitud en la forma que esperará el controlador.

Esto tomará los parámetros pasados a call(), post(), get()… y los asignará al cuerpo de la solicitud en el formato indicado.

Esto también establecerá el encabezado «Tipo de contenido» para su solicitud en consecuencia.

// 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();

Configurando el cuerpo

Puede configurar el cuerpo de su solicitud con el método withBody(). Esto te permite formatear el cuerpo como quieras. para formatearlo. Se recomienda utilizar esto si tiene XML más complicados para probar.

Esto no se configurará el encabezado «Tipo de contenido» por usted. Si lo necesita, puede configurarlo con el método withHeaders().

Comprobando la respuesta

FeatureTestTrait::call() devuelve una instancia de TestResponse. Ver Respuestas de prueba en cómo utilizar esta clase para realizar afirmaciones y verificaciones adicionales en sus casos de prueba.