es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error: Llamada al método indefinido get() en PHPUnit Symfony.

Estoy intentando ejecutar mi primer test unitario con PHPUnit 9.0.0 y Symfony 5.1.8. Este test debe pasar si la respuesta HTTP es 200.

“`php declare(strict_types=1);

namespace Tests\Infrastructure\Api\Controller;

use PHPUnit\Framework\TestCase;

class ControllerTests extends TestCase
{
/** @test */
public function route(): void
{
$response = $this->get('/');

<pre><code> $response->assertStatus(200);

}
</code></pre>

}
“`

Obtengo el siguiente error:

Hubo 1 error:
1) Tests\Infrastructure\Api\Controller\SupplierControllerTests::route
Error: Llamada al método indefinido Tests\Infrastructure\Api\Controller\SupplierControllerTests::get()

Pensé que el método Get era un método predeterminado, importado por PHPUnit\Framework\TestCase, pero no parece ser así.

¿Debo agregar un método Get a mi clase ControllerTests? ¿Cómo puedo desarrollarlo para probar la respuesta HTTP?

Gracias por adelantado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error indica que el método get() no está definido en tu clase ControllerTests. Este método es provisto por la biblioteca de pruebas de Symfony, la cual debe ser incluida en tus pruebas.

    Para incluir la biblioteca de pruebas de Symfony, puedes agregar la siguiente línea al inicio de tu archivo de pruebas:

    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
    

    A continuación, puedes actualizar tu clase de pruebas para que extienda WebTestCase en lugar de TestCase. Esto brindará métodos adicionales como getClient() y request() que puedes utilizar para realizar solicitudes HTTP y verificar sus respuestas.

    Aquí tienes una versión actualizada de tu código de prueba que debería funcionar:

    <?php declare(strict_types=1);
    
    namespace Tests\Infrastructure\Api\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
    
    class ControllerTests extends WebTestCase
    {
        /** @test */
        public function route(): void
        {
            $client = static::createClient();
            $client->request('GET', '/');
    
            $this->assertSame(200, $client->getResponse()->getStatusCode());
        }
    }
    

    Esta versión de la prueba utiliza el método createClient() para crear un nuevo cliente HTTP y luego envía una solicitud GET a la URL raíz. Después de eso, verifica que la respuesta tenga un código de estado 200 OK.

    ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.

Comments are closed.