Cómo solucionar los principales errores con Laravel Dusk y orchestral/testbench-dusk.

Damián Aguilar twitter - 09/05/2021

laravel tests packages php

Este artículo, es al final un pequeño recordatorio para cuando me pongo a hacer tests con Laravel Dusk y empiezan a surgir los errores al hacer las pruebas.

He intentado recopilar los principales errores que me he encontrado, y como los he terminado por solucionar. Empecemos por los errores generados por el driver de Chrome:

Facebook\WebDriver\Exception\SessionNotCreatedException: session not created: Chrome version must be between 70 and 73
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"capabilities":{"firstMatch":[{"browserName":"chrome","goog:chromeOptions":{"w3c":false}}]},"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"w3c":false}}}
Failed to connect to localhost port 9515: Connection refused

En función de si estamos trabajando directamente con Laravel Dusk, o si estamos creando un package para Laravel, tenemos las siguiente soluciones:

 Con Laravel Dusk:

php artisan dusk:chrome-driver

Con orchestral/testbench-dusk:

./vendor/bin/dusk-updater update

Otro error que suele suceder cuando estamos utilizando orchestral/testbench-dusk, es el siguiente:

Illuminate\Contracts\Container\BindingResolutionException: Target class [livewire] does not exist.

En este caso el error ocurre al no encontrar la clase Livewire, pero puede suceder con cualquier clase que se nos olvide añadir. Sucede debido a que en la clase TestCase, nos ha faltado añadir el Service Provider para la clase Livewire:

/**
 * Load the service providers.
 */
protected function getPackageProviders($app)
{
    return [
        LivewireServiceProvider::class,
        ExcelServiceProvider::class,
    ];
}

No hay que olvidar el Service Provider del propio package que estamos probando (en el ejemplo anterior no lo he incluido).

Otro problema que sucede a veces, es que no se defina correctamente el archivo phpunit.xml.dist, por lo que no se debe olvidar añadir los diferentes directorios utilizados para las pruebas:

<testsuites>
    <testsuite name="Browser">
        <directory suffix="Test.php">./tests/Browser</directory>
    </testsuite>
    <testsuite name="Feature">
        <directory suffix="Test.php">./tests/Feature</directory>
    </testsuite>
    <testsuite name="Unit">
        <directory suffix="Test.php">./tests/Unit</directory>
    </testsuite>
</testsuites>

 Referencias: