Pruebas unitarias e integración en Laravel Inertia
Comenzaremos creando las pruebas para el módulo de blog, es decir, para el listado y para la página de detalle.
Crearemos la prueba para el blog:
$ php artisan make:test Blog/PostTest
De Laravel a Inertia
Definiremos la siguiente prueba para el listado, la cual, nos permitirá ejemplificar los cambios entre las pruebas de Laravel o Inertia:
tests\Feature\BlogTest.php
<?php
namespace Tests\Unit\Blog;
// use PHPUnit\Framework\TestCase;
use Tests\TestCase;
class PostTest extends TestCase
{
public function test_index(): void
{
$this->get(route('web.index'))
->assertViewIs('blog.show');
->assertStatus(200);
}
}
La prueba anterior permite verificar que el listado de posts en el index devuelve un código de estado 200.
Ejecutamos:
$ php artisan test
Y veremos un resultado como:
Unable to locate file in Vite manifest: resources/js/Pages/Blog/Index.vue. (View: C:\Users\andre\Herd\inertiastore\resources\views\app.blade.php)
En el cual, nos indica que debemos de tener habilitado los archivos generados por vie, así que, o habilitas el modo desarrollo:
$ npm run dev
O puedes generar los archivos a producción:
$ npm run prod
Si ejecutas las pruebas otra vez, verás que ahora tenemos un error como el siguiente:
+++ Actual
@@ @@
-'blog.show'
+'app'
Esto se debe a que el método de assertViewIs() es emplado para verificar vistas de blade y no componentes en Vue, en base al error anterior, puedes ver que inertia internamente al emplear el método de inertia() para retornar un componente, emplea una vista llamada app:
->assertViewIs('app')
Si ejecutas otra vez, veras que ya no sucede el error anterior, pero, dejar definido una vista app que nosotros no estamos empleando, ya que nosotros. Estamos usando los componentes en Vue no tiene sentido, es ahora donde entran las aserciones creadas específicamente para inertia que veremos en el siguiente apartado.
Assert Inertia
En Inertia, tenemos aserciones específicas para trabajar con los componentes de Vue, para ello, debemos de importar a nivel del archivo de pruebas:
tests\Unit\Blog\PostTest.php
// use PHPUnit\Framework\TestCase;
use Tests\TestCase;
use Inertia\Testing\AssertableInertia as Assert;
class YourTest extends TestCase
public function test_test(): void
{
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => dd($page)));
}
}
En la prueba de listado, en cuyo controlador empleamos el componente de Assert, debemos de configurarlo de la siguiente manera a nivel de la prueba:
tests\Unit\Blog\PostTest.php
<?php
namespace Tests\Unit\Blog;
// use PHPUnit\Framework\TestCase;
use Tests\TestCase;
use Inertia\Testing\AssertableInertia as Assert;
class PostTest extends TestCase
{
public function test_index(): void
{
$this->get(route('web.index'))
// ->assertViewIs('app')
->assertStatus(200);
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => dd($page)
->component('Blog/Index')
->has('posts', fn (Assert $page) => $page
)
);
}
}
Y veremos que si ejecutamos las prueba, la misma pasa; hay muchas verificaciones que se pueden realizar a nivel del las aserciones de Inertia como puedes ver en la documentación oficial:
https://inertiajs.com/testing
Aunque la sintaxis es algo extraña, vamos a ir paso a paso para saber exactamente que como está estructurada, evaluemos el objeto llamado $page a ver que provee:
->assertInertia(fn (Assert $page) => dd($page)
Al ejecutar la prueba, veremos una salida cómo la siguiente:
Inertia\Testing\AssertableInertia {#2397
-props: array:14 [
"errors" => []
"jetstream" => array:11 [
"canCreateTeams" => false
"canManageTwoFactorAuthentication" => true
"canUpdatePassword" => true
"canUpdateProfileInformation" => true
"hasEmailVerification" => false
"flash" => []
"hasAccountDeletionFeatures" => true
"hasApiFeatures" => true
"hasTeamFeatures" => true
"hasTermsAndPrivacyPolicyFeature" => true
"managesProfilePhotos" => true
]
"auth" => array:1 [
"user" => null
]
"errorBags" => []
"flash" => array:1 [
"message" => null
]
"step" => 1
"cart" => []
"posts" => array:13 [
"current_page" => 1
"data" => array:15 [
0 => array:13 [
"id" => 2
"title" => "Post 5111"
"slug" => "post-4"
"date" => "2024-08-22"
"image" => "1729333215.png"
"text" => "asasasasas"
"description" => "asasasas"
"posted" => "not"
"type" => "course"
"category_id" => 1
"created_at" => "2024-08-18T09:54:24.000000Z"
***
"category_id" => 2
"created_at" => "2024-09-21T09:43:12.000000Z"
"updated_at" => "2024-09-21T09:43:12.000000Z"
"category" => array:7 [
"id" => 2
"title" => "Cate 2"
"slug" => "cate-2"
"image" => null
"text" => null
"created_at" => "2024-08-15T10:08:19.000000Z"
"updated_at" => "2024-08-15T10:08:19.000000Z"
]
]
]
"first_page_url" => "http://inertiastore.test/blog?page=1"
"from" => 1
"last_page" => 47
"last_page_url" => "http://inertiastore.test/blog?page=47"
"links" => array:15 [
0 => array:3 [
"url" => null
"label" => "« Previous"
"active" => false
***
"active" => false
]
]
"next_page_url" => "http://inertiastore.test/blog?page=2"
"path" => "http://inertiastore.test/blog"
"per_page" => 15
"prev_page_url" => null
"to" => 15
"total" => 702
]
"categories" => array:2 [
0 => array:7 [
"id" => 1
"title" => "Cate 1"
"slug" => "category-1"
"image" => null
"text" => null
"created_at" => "2024-08-15T10:08:12.000000Z"
"updated_at" => "2024-08-15T10:08:12.000000Z"
]
1 => array:7 [
"id" => 2
"title" => "Cate 2"
"slug" => "cate-2"
"image" => null
"text" => null
"created_at" => "2024-08-15T10:08:19.000000Z"
"updated_at" => "2024-08-15T10:08:19.000000Z"
]
]
"prop_type" => null
"prop_category_id" => null
"prop_from" => null
"prop_to" => null
"prop_search" => null
]
-path: null
#interacted: []
-component: "Blog/Index"
-url: "/blog"
-version: "b05311e78830e9fb34e382b9802ceab2"
La salida anterior fue recordaba para evitar llenar 4 páginas con datos que nosotros no vamos a evaluar en esta guía, pero, se recomienda al lector que haga la prueba y evalúe el resultado.
Transcripción video
Repaso de las pruebas unitarias
En esta sección vamos a trabajar con las pruebas en Laravel inertia, está que viene siendo el siguiente bloque que tenemos por aquí antes de que la cierres te consideraría que al menos veas esta clase luego bueno decides que es lo que quieras hacer pero te recomendaría enormemente que implement pruebas a nivel de tu aplicación y es un poco lo que voy a introducirte en esta sección aparte de eso también te recuerdo que este curso/libro Laravel Inertia en este caso viene siendo como que el siguiente nivel es decir ya yo tengo un curso del Laravel básico en la cual invertí más de 7 horas creo que fue alrededor de 8 horas al menos a la fecha haciendo pruebas explicándote el por qué y todo lo demás.
Por lo tanto ya ese trabajo yo lo hice en este caso o en ese caso fue para explicar las pruebas el arab el básico aquí no tenemos muchos cambios pero es importante que entiendas que ya yo doy por hecho que ya al menos tienes ese conocimiento por lo tanto voy a ir un poco más acelerado en caso de que te pierdas un poco también tengo unos recursos en mi canal de YouTube pero otra vez ya ese para mí es un tema zanjado que forma parte de Laravel básico que son los requisitos que tienes que tener o tenías que tener para tomar este curso así que aclarado es un poco lo que quiero hacer aquí es un pequeño repaso.
Por más que sea para eso va a hacer un repaso aquí simplemente leyendo algunos t estos claves en mi libro en este caso sería el libro de Laravel básico por lo comentado antes que este apartado que tenemos aquí siéntete libre en cualquier momento de pausar la clase y leer los fragmentos del libro y yo voy a ir tomando partes importantes comenzando por lo que quiero es convencerte de que tomes esta sección es que las pruebas es decir por qué hacer pruebas las pruebas son beneficiosas por varias razones porque cuando nosotros hacemos pruebas esto va a ser una garantía de que la aplicación funcione correctamente y de que la aplicación es de calidad en otras palabras esto es Generalmente un indicador de calidad de software al momento de implementar la aplicación es decir que no tenemos un bendito desastre ahí que lo que implementamos podemos realizar pruebas para probarlo ya cuando empecemos a implementar las pruebas en caso de que no hayas hecho muchas vas a ver un poquito de sentido a todo esto pero precisamente es cómo se implementan las mismas ahí nosotros podemos tener varios tip de qué es lo que estamos implementando y si realmente la implementación que hicimos es de calidad o no es de calidad otro punto importante que es como que algo negativo con que la aplicación pasa todas las pruebas que implementos esto no significa que esté libre de errores simplemente que posiblemente no creamos las pruebas suficientes para detectar errores pero por más que sea como te indicaba es un indicador de calidad de software de que nuestra aplicación al menos está bien al menos de manera básica aunque todo depende de Cuántas pruebas quieras realizar nosotros simplemente vamos a hacer un puñado de ell simplemente para ejemplificar el proceso entonces es un poco aquí lo mencionado qué probar básicamente todo lo que nosotros implementos usualmente nos enfocamos más es la parte del controlador.
Que probar
Es decir de controladores componentes sea lo que sea que estemos empleando probar formularios funciones de ayudas en caso de que les implementos serían buenos candidatos y específicamente todo lo que nosotros vayamos a realizar peticiones peticiones tipo get post delete todo eso deberíamos de probarlo En otras palabras se pudiera decir lo que tengamos aquí implementados dentro del app también podamos probar la vista Pero ya al menos eso no lo tengo pensado cubrir en esta sección entonces en Laravel para a nadie tenemos varias formas de hacer lo mismo entonces podemos emplear php unit que viene siendo el enfoque clásico lo pudiera considerar así O el más moderno entre comillas porque a la final son muy similares los dos ser el depes que nos ofrece una sintaxis un poquito más limpia y elegante yo en esta sección voy a emplear php unit y como te comentaba ya yo en el curso básico hice ambas pes php unit y luego las compará vamos por lo tanto debería tener en caso de que hayas escogido pest como framework para testing cuando locast es el proyecto perfectamente las pudieras adaptar pero existen estos dos como te digo Son muy similares no hay mucha diferencia en eso Entonces por aquí tenemos dos carpetas que son las carpetas de feature y las la carpeta llamada unit en este caso Esto hace referencia a las pruebas de integración que son las que tenemos por aquí como lo son los controladores o aquellos componentes que no los puedes probar de manera individual sino hacen un montón de operaciones Y en este caso las pruebas unitarias que no nos enfocaremos en este curso nosotros más que todo será en esto para probar los controladores son aquellos componentes que tú lo puedes como quien dice dividir o que no perdón que no los puedes dividir como fate un modelo un método una función de ayuda Yo creo que es un buen ejemplo de esto que simplemente es una operación que tú estás realizando mientras que los controladores son más genéricos porque se conectan a modelos se conectan al disco hacen varias operaciones mientras que usualmente lo que es un facade un modelo son estructuras más indivisibles se pudiera decir entonces en base a eso tienes que decidir dónde lo vas a colocar como te digo cuando estamos trabajando ya con los controladores usualmente se coloca aquí en la carpeta de feature aunque eso es simplemente una organización entonces para correr las pruebas tenemos de pende de lo que emplees si estás empleando php unit puedes colocar:
$ vendor/bin/phpunit
Y si estás empleando pest puedes emplear:
$ vendor/bin/pest
O directamente ejecutas:
$ php artisan test
Tenemos el comando de make test aquí le puedes colocar en la el juego de carpetas al igual que ocurre con los controladores:
$ php artisan make:test <ClassTest>
Pruebas Unitarias y de Integración
Y demás si quieres que sea una prueba unitaria le puedes colocar aquí la opción de menos menos unit entonces aquí teníamos una prueba que era lo primero que hicimos unas operaciones Matemáticas una calculadora por así decirlo ahí lo puedes ver suma resta división y multiplicación y este era el comando que utilizamos para crearlo en este caso como son operaciones como quien dice no pueden ser divisibles era una una prueba unitaria Entonces aquí colocamos la opción de menos menos unit para que lo cree la carpeta de unit que fue la mencionada anteriormente aquí lo tuviéramos Y a partir de aquí qué fue lo que hicimos hacer aquí algunas pruebas en este caso implementamos otra parte esto obviamente no debería estar aquí pero era precisamente para facilitar el ejercicio implementamos también la capa para consumir este recurso que es el que queríamos probar todo junto en el mismo archivo entonces por aquí simplemente creamos una instancia del objeto y empezamos a hacer pruebas entonces aquí era un poco lo comentado ya con esto voy cerrando.
Entendiendo las pruebas
Tenemos varios métodos de aserción que son los que podemos emplear para probarlo de igual manera ahorita voy repasando eso no quiero enfocarme tanto pero son de tipo aserción y son como condicionales:
$this->assertTrue(true);
Por ejemplo este mide el igual igual tenemos el mayor igual el menor igual si es entero si es negativo si tiene cierta ruta tenemos un montón y es lo que estamos midiendo por aquí en este caso bueno estos son los más utilizados como te indicaba tenemos muchísimos cuál es el chiste aquí ya con esto voy cerrando como te comenté al inicio con que tú realices pruebas no es una condición suficiente para indicar que la aplicación esté libre de errores sino seguramente de que no hiciste las pruebas suficientes o no las implementas.
Objeto $page en los métodos se aserción en Laravel Inertia para pruebas Unitarias e integración
Para conocer que tenemos en el objeto $page:
->assertInertia(fn (Assert $page) => $page
Podemos hacer un debug; así que venimos acá lo colocamos:
->assertInertia(fn (Assert $page) => dd($page)
Yjecutamos a ver qué nos trae aquí fíjate que tenemos para saber exactamente qué es lo que tenemos aquí qué es lo que podemos explorar es un poco el por qué estoy haciendo este video y puedes ver que es el bendito $page que tenemos de toda la vida de que tenemos de toda la vida aquí fíjate que nos está devolviendo la paginación es muy largo son como cuatro páginas esto sería para el contenido que le estamos pasando Ya llegamos a a las publicaciones si seguimos subiendo un poco más rápido eso es lo que tenemos entonces a partir de esto ya tú puedes entender qué es lo que puedes explorar y qué es lo que no puedes explorar por ejemplo si le pasas un formulario incorrecto entonces ha qu sabes que tienes el de error que lo puedes explorar el String tenemos es información bueno esto sería de usuario de qué es lo que puede serc el usuario aquí tenemos el usuario yo no estoy autenticado y por eso aparece aparece de esta forma el flash que lo configuramos nosotros entre otros:
Inertia\Testing\AssertableInertia {#2397
-props: array:14 [
"errors" => []
"jetstream" => array:11 [
"canCreateTeams" => false
"canManageTwoFactorAuthentication" => true
"canUpdatePassword" => true
"canUpdateProfileInformation" => true
"hasEmailVerification" => false
"flash" => []
"hasAccountDeletionFeatures" => true
"hasApiFeatures" => true
"hasTeamFeatures" => true
"hasTermsAndPrivacyPolicyFeature" => true
"managesProfilePhotos" => true
]
"auth" => array:1 [
"user" => null
]
"errorBags" => []
"flash" => array:1 [
"message" => null
]
"step" => 1
"cart" => []
"posts" => array:13 [
"current_page" => 1
"data" => array:15 [
0 => array:13 [
"id" => 2
"title" => "Post 5111"
"slug" => "post-4"
"date" => "2024-08-22"
"image" => "1729333215.png"
"text" => "asasasasas"
"description" => "asasasas"
"posted" => "not"
"type" => "course"
"category_id" => 1
"created_at" => "2024-08-18T09:54:24.000000Z"
***
"category_id" => 2
"created_at" => "2024-09-21T09:43:12.000000Z"
"updated_at" => "2024-09-21T09:43:12.000000Z"
"category" => array:7 [
"id" => 2
"title" => "Cate 2"
"slug" => "cate-2"
"image" => null
"text" => null
"created_at" => "2024-08-15T10:08:19.000000Z"
"updated_at" => "2024-08-15T10:08:19.000000Z"
]
]
]
"first_page_url" => "http://inertiastore.test/blog?page=1"
"from" => 1
"last_page" => 47
"last_page_url" => "http://inertiastore.test/blog?page=47"
"links" => array:15 [
0 => array:3 [
"url" => null
"label" => "« Previous"
"active" => false
***
"active" => false
]
]
"next_page_url" => "http://inertiastore.test/blog?page=2"
"path" => "http://inertiastore.test/blog"
"per_page" => 15
"prev_page_url" => null
"to" => 15
"total" => 702
]
"categories" => array:2 [
0 => array:7 [
"id" => 1
"title" => "Cate 1"
"slug" => "category-1"
"image" => null
"text" => null
"created_at" => "2024-08-15T10:08:12.000000Z"
"updated_at" => "2024-08-15T10:08:12.000000Z"
]
1 => array:7 [
"id" => 2
"title" => "Cate 2"
"slug" => "cate-2"
"image" => null
"text" => null
"created_at" => "2024-08-15T10:08:19.000000Z"
"updated_at" => "2024-08-15T10:08:19.000000Z"
]
]
"prop_type" => null
"prop_category_id" => null
"prop_from" => null
"prop_to" => null
"prop_search" => null
]
-path: null
#interacted: []
-component: "Blog/Index"
-url: "/blog"
-version: "b05311e78830e9fb34e382b9802ceab2"
Entendiendo que es lo que tenemos, serás completamente capaz de hacer estas condiciones que luego te explico un poco para qué son estos métodos pero de momento quiero explicarte bueno todo lo de atrás Entonces es lo que puedes ver por acá es lo que están evaluando lo que pasa; al menos de momento podemos comprobar que sea la parte de que exista pudiéramos comprobarlo fácilmente aquí creo que tengo uno más abajo aquí tengo que limpiar la salida aquí es la presentación del objeto page algo así pudiéramos evaluar Entonces esto ya adelantándonos un poquito ya aclarado otra vez esto y ya vemos qué es lo que tenemos que esto también lo puedes ver por acá pero tienen que consir lo que le estamos pasando aquí a nivel del componente todo esto y estoy hablando ahorita del objeto de post pero por aquí abajo luego de esto tiene que aparecer lo que pasa es que cuesta un poquito aquí la lectura debe de aparecer las categorías prop type y todos estos parámetros que le estamos pasando acá voy a intentar encontrarlo creo que está en al final aquí está la categoría otro array y aquí tenemos el resto de los señalados entonces para no dejar esto tan cortado ya que el objetivo de este video Es simplemente ver el objeto page voy a dejártelo aquí comentado para que lo evalúes o compares el código vamos a volver a esto que tiene que funcionar sin problemas.
De Laravel a Inertia en las Pruebas Unitarias y de Integración AssertableInertia 3
Nos quedamos aquí en la cual estamos comprobando cuál es la página que está devolviendo nos quedamos en la cual no podemos colocar directamente cuál es el componente que estamos devolviendo que para este ejemplo sería aquí el primero el de Index el de block Index sio bueno en este caso tenemos que colocar algo tan genérico como app que no nos dice absolutamente nada ya que no es datos que nosotros estamos configurando sino ya sería manejado de manera interna por inertia y con esto no podemos acceder tampoco qué datos le estamos pasando:
$this->get(route('web.index'))
->assertViewIs('app');
->assertStatus(200);
Si le estamos pasando un post el resto de los parámetros etcétera lo cual es un problema entonces como te comentaba ya aquí no podemos emplear la estructura básica que tenemos en laravel de los métodos de aserción sio tenemos que ir un poquito más allá y emplear algunas funciones que nos permite inertia o que incorpore inertia específicamente tenemos que importar la siguiente de clase y luego por aquí tenemos uno llamado hacer inertia como te comento tenemos un nuevo método en la cual tiene esta sintaxis un poco rara, es simplemente una función de flecha Y a partir de aquí le puedes encadenar algunas operaciones tal cual puedes ver aquí por ejemplo puede ser el de has que lo puedes emplear de varias formas ya lo iros viendo poco a poco pero esto también te lo indica aquí la documentación oficial que no es de todo Clara ya que me parece un poquito genérica pero aquí puedes ver también un ejemplo Fíjate que con hacer inertia si puedes acceder a lo que es el componente cuál es el componente que estás procesando y métodos como has y tenemos varios ahí:
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => $page));
Ahorita te lo puedo mostrar pero los tenemos aquí de momento no te preocupes mucho por los métodos aunque en específico el de has que hace como tres cosas pero el de has una de las operaciones que hace es verificar si existe y también cuentan las longitudes es decir es como un iset si está establecido y el deware al igual que ocurre con las cláusulas ween elen Busca por un valor fijo es decir es un Igual igual Haz otras cositas como te digo que puedes ver ir viendo por aquí pero ya lo iremos cubriendo poco a poco de momento lo único que quiero hacer es bueno que al menos se evalúe el bendito componente:
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => dd($page)
->component('Blog/Index'));
Parámetro page
En la documentación oficial estamos en empleando la sintaxis de una función de flecha de php, colocamos el parámetro que se llama page le podemos colocar el tipo y por aquí fíjate que no lo veo Qué raro que no sale porque el paquete es inertia testing assemble inertia pero a mí al menos no me aparece Bueno entonces me toca importarlo aquí de manera manual voy a colocarlo por aquí arriba coloco use inertia coloco testing coloco hacer acert inertia y aquí le coloco el alias de acer bueno por eso es que no aparece porque tiene un alias y este es el que emplearía por acá y ahí sí lo está encontrando perfectamente entonces importanto esto que haga la navegación o simplemente colocarías aquí assertInertia supongo pero voy a dejarlo así bien por aquí esto es una función de flecha tiene sentido aquí porque no vamos a imprimir nada todo es llamar un montón de métodos y aquí recibimos el o retornamos el objeto de page aquí lo tenemos como parámetro y aquí lo retornamos y a partir de aquí mediante este objeto llamado page podemos hacer algunas comprobaciones así que en en este caso esto va aquí adentro aquí colocamos bueno para que quede organizado sería así coloco un punto y coma que me estoy comiendo creo que me falta un paréntesis okay así sí creo voy a ejecutar perfecto ahí pasa es importante que hagas esto para que te familiarices un poco con la sintaxis y aquí en el page es que le colocarías el resto de los métodos fíjate que si colocas aquí la flechita tenemos muchas cosas hay cosas que son así genéricas acá del autocompletado pero por algún lugar en la vida están algunos métodos que podemos ampliar como el de has y el de where o el de component.
Metodos
Conoceremos los metodos principales en el API de Laravel para hacer pruebas.
Método has()
A partir de aquí vamos a emplear un método que todavía no sabemos muy bien lo que hace pero como te indicaba hace varias cositas entre ellas es un iset o la comprobación 1ue hace el iset si existe vamos a ver si esto devuelve algo que indica si existe o no existe y fíjate que 1ué pasó exitosamente otra vez para saber si realmente esto está haciendo algo o está jugando con nosotros le colocamos un parámetro incorrecto y por aquí deberíamos ver un bonito error Por lo tanto ya sabes que esto no existe y aquí Simplemente te dice que no existe no te da una como quien dice cuál debería ser porque no lo no es capaz de hacer match entonces este es otro tipo de error que te se te puede presentar entonces corregimos otra vez teniendo muy claro que lo que colocamos aquí son los parámetros que le estamos suministrando a nuestro componente vamos a dejarlo hasta acá y en la siguiente clase seguimos explorando un poquito estos métodos ya quedamos en este punto que estamos empleando Inertia mediante el objeto page cuyo parámetro es este que portamos antes ya conocemos un poco cómo funciona su sintaxis que es aquí una función de flecha:
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => $page
Esto sería lo que estamos retornando y este montón de métodos que estamos colocando por acá es sobre el objeto de page que ya también evaluamos y ya sabes cómo evaluarlo y a partir de aquí que datos tenemos ahí .
Ya que en este caso es php y aquí ya creo pero tiene la misma Data que es importante que lo entiendas que es el mismo objeto Y a partir de ahí entendiendo que en el objeto page tenemos básicamente No solamente la información de la página sino también del usuario entre otras cositas de inertia share y otras cositas:
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => $page
->component('Blog/Index')
->has('posts', fn (Assert $posts) => dd($posts)
Es fácilmente entendible qué es lo que tenemos acá para poder trabajar y con esto obtener los parámetros ya que es parte del objeto page pero ahí lo puedes imprimir como hemos hecho anteriormente en el curso bueno aclarado esto vamos a evaluar un poco lo que es el método de has que tenemos varias implementaciones y es otra vez criticando un poquito la documentación oficial que me parece muy poco precisa ya que fíjate que aquí el has lo estamos empleando fíjate yo lo estoy empleando aquí sin ningún parámetro aquí lo están empleando con un parámetro y también lo están empleando como para implementar un callback:
->has('seasons.4.episodes')
->has('seasons.4.episodes', 21)
->has('host', fn (Assert $page) => $page
->where('id', 1)
Esto es para saber si existe esta cuenta las cantidades como segundo parámetro y también como segundo parámetro le puedes retornar una función con la cual puedes seguir evaluando cosas en este caso por ejemplo como ya tenemos el post que es el page aquí también pudiéramos evaluar con otro método que vamos a ver a la siguiente clase pero para ir fastidiando todo por aquí fíjate que tenemos un parámetro al final llamado o al inicio no sé dónde llamado last page que no lo encuentro a ver aquí tenemos last page:
$this->get(route('web.index'))
->assertInertia(fn (Assert $page) => $page
->component('Blog/Index')
->where('categories', Category::get())
->where('prop_from', null)
->where('posts', Post::with('category')->paginate(15))
->has('prop_from')
->has('posts', 15)
->has('posts', fn (Assert $page) => $page
->where('last_page', 47)
Método where()
Ta conocemos cómo emplear el método has() en este caso en pocas palabras se pudiera resumir que es para verificar la existencia de alguna propiedad algún prop que tengamos definido pero qué pasa si queremos comprobar el valor directamente que viene siendo más interesante claro está en este caso tenemos el where que se puede decir que funciona de igual manera que el where en Eloquent es decir compara es por el valor ya sea un entero ya sea un String ya sea una rate ya sea una paginación cualquier cosa y aquí puedes ver un ejemplo de le que nosotros vamos a hacer.
Entonces esto lo tienes que como quien dice tienes que hacer match con lo que tenemos por acá entonces por aquí podemos ver si subimos un poco vamos a comenzar por lo más sencillo que sería el de las categorías asumo yo entonces el de la categoría no viene siendo más que un array un listado de categorías así decir por lo tanto:
$this->get(route('web.index'))->assertInertia(
fn(Assert $page) => $page
->component('Blog/Index')
***
->where('categories', Category::get())
Lo que tenemos que colocar en este caso sería justamente por acá recuerda que no importa el orden si lo colocas arriba o abajo es exactamente lo mismo.
Acepto recibir anuncios de interes sobre este Blog.
Veremos los primeros pasos con Laravel Inertia en la creación de pruebas unitarias y/o de integración.
- Andrés Cruz
Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos Curso y Libro primeros pasos con Laravel 12 Inertia 2 + Vue.js y Tailwind.css - 2025.