Laravel Tests Dom Crawler
Paquete para facilitar hacer comprobaciones sobre HTML, vistas, etc.
Ver https://laravel-news.com/symfony-domcrawler-with-laravel-http-tests
Ejemplo
Para usarlo, hay que llamar a DomCrawler::for, y pasarle el resultado de $this->get, $this->post, etc de un test que extienda de \Tests\TestCase (es decir, cualquier test normal de Laravel)
public function testSeMuestraLaVistaDeEdicionDeUnaSeccionDeCronometraje(): void
{
// ...
$result = $this->get(/*...*/);
// Assert
DomCrawler::for($result)->assertNodeExists('a#prueba');
}
Métodos
Evitar múltiples llamadas a crawl
No es necesario llamar a crawl para cada assert, se pueden hacer llamadas del tipo DomCrawler::for($result)->assertNodeExists(...)->assertNodeExists(...)...
crawl
Devuelve una instancia de Symfony\Component\DomCrawler\Crawler para casos en los que se necesitan pruebas más específicas. Ver la documentación del componente en The DomCrawler Component (Symfony Docs).
DomCrawler::for($result)->crawl()
Este método no se puede encadenar.
assertNodeExists
Comprueba que existe un nodo con el selector indicado.
// Debe existir un enlace con el id "prueba"
DomCrawler::for($result)->assertNodeExists('a#prueba');
// Debe existir un input de tipo texto con el nombre "name"
DomCrawler::for($result)->assertNodeExists('input[type="text"][name="name"]');
// Debe existir un select con el nombre "participant", y tiene que tener la opci
DomCrawler::for($result)->assertNodeExists('select[name="participant"] option[value="1"][selected]')
assertNodeDoesNotExists
La inversa de la anterior
assertSelectHasOptionSelected
Comprueba que el select $fieldName existe y tiene la opción $optionValue seleccionada.
assertSelectDoesNotHaveOptionSelected
Comprueba que el select $fieldName existe y NO tiene la opción $optionValue seleccionada.