{"id":74315,"date":"2024-03-19T09:23:53","date_gmt":"2024-03-19T08:23:53","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=74315&#038;preview=true&#038;preview_id=74315"},"modified":"2024-03-22T10:08:26","modified_gmt":"2024-03-22T09:08:26","slug":"pruebas-unitarias-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/","title":{"rendered":"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel"},"content":{"rendered":"<p>Las pruebas unitarias son cruciales en el desarrollo de software, ya que garantizan que los componentes de tu aplicaci\u00f3n funcionan como se espera de ellos de forma aislada. Al escribir pruebas para unidades de c\u00f3digo espec\u00edficas, puedes identificar y corregir errores en una fase temprana del desarrollo, lo que conduce a un software m\u00e1s fiable y estable.<\/p>\n<p>En un flujo de integraci\u00f3n continua\/entrega continua (CI\/CD), puedes ejecutar estas pruebas autom\u00e1ticamente despu\u00e9s de realizar cambios en el c\u00f3digo base. Esto garantiza que el nuevo c\u00f3digo no introduzca errores ni rompa la funcionalidad existente.<\/p>\n<p>Este art\u00edculo destaca la importancia de las pruebas unitarias en las <a href=\"https:\/\/kinsta.com\/es\/blog\/instalar-laravel\/\">aplicaciones Laravel<\/a>, detallando c\u00f3mo escribir pruebas unitarias para una aplicaci\u00f3n Laravel desplegada utilizando el <a href=\"https:\/\/sevalla.com\/application-hosting\/\">servicio de Alojamiento de Aplicaciones<\/a> de Kinsta.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Introducci\u00f3n a PHPUnit<\/h2>\n<p><a href=\"https:\/\/kinsta.com\/es\/blog\/herramientas-de-prueba-php\/#2-phpunit\">PHPUnit<\/a> es un framework de pruebas ampliamente utilizado dentro del ecosistema PHP dise\u00f1ado para pruebas unitarias. Dispone de un robusto conjunto de herramientas para crear y ejecutar pruebas, lo que lo convierte en un recurso fundamental para garantizar la fiabilidad y calidad de tu c\u00f3digo base.<\/p>\n<p><a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> soporta pruebas con <a href=\"https:\/\/phpunit.readthedocs.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHPUnit<\/a> e incluye pr\u00e1cticos m\u00e9todos de ayuda que te permiten probar tu aplicaci\u00f3n.<\/p>\n<p>Configurar PHPUnit en un proyecto Laravel implica una configuraci\u00f3n m\u00ednima. Laravel proporciona un entorno de pruebas preconfigurado, que incluye un archivo <strong>phpunit.xml<\/strong> y un directorio <strong>tests <\/strong>(de pruebas) dedicado para tus archivos de prueba.<\/p>\n<p>Alternativamente, puedes modificar el archivo <strong>phpunit.xml<\/strong> para definir opciones personalizadas para una experiencia de pruebas a medida. Tambi\u00e9n puedes crear un archivo de entorno <strong>.env.testing <\/strong>en la carpeta ra\u00edz del proyecto en lugar de utilizar el archivo <strong>.env<\/strong>.<\/p>\n<h2>Dise\u00f1o predeterminado de pruebas en Laravel<\/h2>\n<p><a href=\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\">Laravel<\/a> proporciona un dise\u00f1o de directorio predeterminado estructurado. El directorio ra\u00edz de tu proyecto Laravel contiene un directorio <strong>tests<\/strong> con los subdirectorios <strong>Feature <\/strong>y <strong>Unit <\/strong>. Este dise\u00f1o facilita la separaci\u00f3n de los distintos tipos de pruebas y mantiene un entorno de pruebas limpio y organizado.<\/p>\n<p>El archivo <strong>phpunit.xml<\/strong> de un proyecto Laravel es crucial para orquestar el proceso de pruebas, garantizar la coherencia en las ejecuciones de pruebas y permitirte personalizar el comportamiento de PHPUnit seg\u00fan los requisitos del proyecto. Te permite definir c\u00f3mo ejecutar las pruebas, incluyendo la definici\u00f3n de los conjuntos de pruebas, la especificaci\u00f3n del entorno de pruebas y la configuraci\u00f3n de las conexiones a la base de datos.<\/p>\n<p>Este archivo tambi\u00e9n especifica que la sesi\u00f3n, la cach\u00e9 y el correo electr\u00f3nico deben establecerse en el controlador del array, lo que garantiza que no persistan datos de sesi\u00f3n, cach\u00e9 o correo electr\u00f3nico al ejecutar las pruebas.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>El t\u00e9rmino \u00abcontrolador\u00bb se refiere a un ajuste de configuraci\u00f3n que almacena estos datos en un array en memoria durante las pruebas, manteniendo el aislamiento y evitando la persistencia de datos entre ejecuciones de pruebas.<\/p>\n<\/aside>\n\n<p>Puedes realizar varios tipos de pruebas en tu aplicaci\u00f3n Laravel:<\/p>\n<ul>\n<li><strong>Pruebas unitarias \u2014<\/strong>\u00a0se centran en componentes individuales de tu c\u00f3digo, como clases, m\u00e9todos y funciones. Estas pruebas permanecen aisladas de la aplicaci\u00f3n Laravel y verifican que determinadas unidades de c\u00f3digo funcionan como se espera. Ten en cuenta que las pruebas definidas en el directorio <strong>tests\/Unit <\/strong>no inician la aplicaci\u00f3n Laravel, lo que significa que no pueden acceder a la <a href=\"https:\/\/kinsta.com\/database\/\">base de datos<\/a> ni a otros servicios que ofrece el framework.<\/li>\n<li><strong>Pruebas de caracter\u00edsticas \u2014<\/strong>\u00a0validan la funcionalidad m\u00e1s amplia de tu aplicaci\u00f3n. Estas pruebas simulan peticiones y respuestas HTTP, permiti\u00e9ndote probar rutas, controladores y la integraci\u00f3n de varios componentes. Las pruebas de caracter\u00edsticas ayudan a garantizar que las distintas partes de tu aplicaci\u00f3n funcionan juntas como se espera.<\/li>\n<li><strong>Pruebas de navegador \u2014 <\/strong>van m\u00e1s all\u00e1 automatizando las interacciones del navegador. Las pruebas utilizan <a href=\"https:\/\/laravel.com\/docs\/10.x\/dusk\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Dusk<\/a>, una herramienta de pruebas y automatizaci\u00f3n del navegador, para simular las interacciones del usuario, como rellenar formularios y hacer clic en botones. Las pruebas de navegador son cruciales para validar el comportamiento de tu aplicaci\u00f3n y la experiencia del usuario en navegadores del mundo real.<\/li>\n<\/ul>\n<h2>Conceptos de desarrollo guiado por pruebas<\/h2>\n<p>El desarrollo dirigido por pruebas (TDD, Test-driven development) es un enfoque de desarrollo de software que hace hincapi\u00e9 en la realizaci\u00f3n de pruebas antes de implementar el c\u00f3digo. Este enfoque sigue un proceso conocido como ciclo rojo-verde-refactorizaci\u00f3n.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/03\/tdd-cycle.jpg\" alt=\"El desarrollo guiado por pruebas mostrando rojo-verde-refactor.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">El ciclo de desarrollo dirigido por pruebas mostrando rojo-verde-refactorizaci\u00f3n.<\/figcaption><\/figure>\n<p>Aqu\u00ed tienes una explicaci\u00f3n de este ciclo:<\/p>\n<ul>\n<li><strong>Fase roja<\/strong> \u2014 Escribe una nueva prueba para definir la funcionalidad o una mejora de una existente antes de implementar el c\u00f3digo real. La prueba debe fallar (como significa \u00abrojo\u00bb) porque no hay c\u00f3digo correspondiente para hacerla pasar.<\/li>\n<li><strong>Fase verde<\/strong> \u2014 Escribe el c\u00f3digo suficiente para que la prueba que falla pase, convirti\u00e9ndola de roja a verde. El c\u00f3digo no ser\u00e1 \u00f3ptimo, pero cumple los requisitos del caso de prueba correspondiente.<\/li>\n<li><strong>Fase de refactorizaci\u00f3n<\/strong> \u2014 Refactoriza el c\u00f3digo para mejorar su legibilidad, mantenimiento y rendimiento sin cambiar su comportamiento. En esta fase, puedes realizar c\u00f3modamente cambios en el c\u00f3digo sin preocuparte por los problemas de regresi\u00f3n, ya que los casos de prueba existentes los detectan.<\/li>\n<\/ul>\n<p>TDD tiene varias ventajas:<\/p>\n<ul>\n<li><strong>Detecci\u00f3n temprana de errores<\/strong> \u2014 TDD ayuda a detectar errores al principio del proceso de desarrollo, contribuyendo a reducir el coste y el tiempo de solucionar problemas m\u00e1s adelante en el ciclo de desarrollo.<\/li>\n<li><strong>Dise\u00f1o mejorado<\/strong> \u2014 TDD fomenta el c\u00f3digo modular y poco acoplado para mejorar el dise\u00f1o del software. Te anima a pensar en la interfaz y en las interacciones de los componentes antes de la implementaci\u00f3n.<\/li>\n<li><strong>Confianza en la refactorizaci\u00f3n<\/strong> \u2014 Puedes refactorizar el c\u00f3digo con confianza, sabiendo que las pruebas existentes identifican r\u00e1pidamente cualquier regresi\u00f3n introducida durante la refactorizaci\u00f3n.<\/li>\n<li><strong>Documentaci\u00f3n viva<\/strong> \u2014 Los casos de prueba sirven como documentaci\u00f3n viva al proporcionar ejemplos de c\u00f3mo debe comportarse el c\u00f3digo. Esta documentaci\u00f3n est\u00e1 siempre actualizada, ya que los fallos en las pruebas indican problemas en el c\u00f3digo.<\/li>\n<\/ul>\n<p>En el desarrollo de Laravel, aplicas los principios de TDD escribiendo pruebas para componentes como controladores, modelos y servicios antes de implementarlos.<\/p>\n<p>El entorno de pruebas de Laravel, incluido PHPUnit, proporciona m\u00e9todos y aserciones convenientes para facilitar el TDD, asegurando que puedas crear pruebas significativas y seguir el ciclo rojo-verde-refactor de forma eficaz.<\/p>\n<h2>Ejemplos b\u00e1sicos de pruebas unitarias<\/h2>\n<p>Esta secci\u00f3n explica c\u00f3mo escribir una prueba sencilla para comprobar la funcionalidad de tu modelo.<\/p>\n<h3>Requisitos previos<\/h3>\n<p>Para seguir adelante, necesitas lo siguiente:<\/p>\n<ul>\n<li>Cumplir los requisitos previos enumerados en la <a href=\"https:\/\/kinsta.com\/es\/blog\/blog-laravel\/#prerequisites\">gu\u00eda del blog de Laravel<\/a>.<\/li>\n<li>Una aplicaci\u00f3n Laravel. Este tutorial utiliza la aplicaci\u00f3n creada en la gu\u00eda enlazada anteriormente. Puedes leerla y crear la aplicaci\u00f3n del blog, pero si s\u00f3lo necesitas el c\u00f3digo fuente para implementar las pruebas, sigue los pasos que se indican a continuaci\u00f3n.<\/li>\n<li><a href=\"https:\/\/xdebug.org\/docs\/install\" target=\"_blank\" rel=\"noopener noreferrer\">Xdebug<\/a> instalado y configurado con el <a href=\"https:\/\/xdebug.org\/docs\/code_coverage#mode\" target=\"_blank\" rel=\"noopener noreferrer\">modo de cobertura activado<\/a>.<\/li>\n<\/ul>\n<h3>Configura el proyecto<\/h3>\n<ol start=\"1\">\n<li>Ejecuta este comando en una ventana de terminal para clonar el proyecto.\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-blog.git<\/code><\/pre>\n<\/li>\n<li>Entra en la carpeta del proyecto y ejecuta el comando <code>composer install<\/code> para instalar las dependencias del proyecto.<\/li>\n<li>Cambia el nombre del archivo <strong>env.example<\/strong> por <strong>.env<\/strong>.<\/li>\n<li>Ejecuta el comando <code>php artisan key:generate<\/code> para generar una clave de aplicaci\u00f3n.<\/li>\n<\/ol>\n<h3>Crear y ejecutar pruebas<\/h3>\n<p>Para empezar, aseg\u00farate de que tienes el c\u00f3digo del proyecto en tu m\u00e1quina. El modelo que vas a probar es el modelo <code>Post<\/code> definido en el archivo <strong>app\/Http\/Models\/Post.php<\/strong>. Este modelo engloba varios atributos rellenables, como <code>title<\/code>, <code>description<\/code>, y <code>image<\/code>.<\/p>\n<p>Tu tarea consiste en elaborar pruebas unitarias sencillas para este modelo. Una verifica que los atributos est\u00e1n configurados correctamente, mientras que otra examina la asignaci\u00f3n masiva intentando asignar un atributo no rellenable.<\/p>\n<ol start=\"1\">\n<li>Ejecuta el comando <code>php artisan make:test PostModelFunctionalityTest --unit<\/code> para crear un nuevo caso de prueba. La opci\u00f3n <code>--unit<\/code> especifica que se trata de una prueba unitaria y la guarda en el directorio <strong>tests\/Unit<\/strong><strong>\u00a0<\/strong>.<\/li>\n<li>Abre el archivo <strong>tests\/Unit\/PostModelFunctionalityTest.php <\/strong>y sustituye la funci\u00f3n <code>test_example<\/code> por este c\u00f3digo:\n<pre><code class=\"language-php\">public function test_attributes_are_set_correctly()\n   {\n       \/\/ create a new post instance with attributes\n       $post = new Post([\n           'title' =&gt; 'Sample Post Title',\n           'description' =&gt; 'Sample Post Description',\n           'image' =&gt; 'sample_image.jpg',\n       ]);\n\n       \/\/ check if you set the attributes correctly\n       $this-&gt;assertEquals('Sample Post Title', $post-&gt;title);\n       $this-&gt;assertEquals('Sample Post Description', $post-&gt;description);\n       $this-&gt;assertEquals('sample_image.jpg', $post-&gt;image);\n   }\n\n   public function test_non_fillable_attributes_are_not_set()\n   {\n       \/\/ Attempt to create a post with additional attributes (non-fillable)\n       $post = new Post([\n           'title' =&gt; 'Sample Post Title',\n           'description' =&gt; 'Sample Post Description',\n           'image' =&gt; 'sample_image.jpg',\n           'author' =&gt; 'John Doe',\n       ]);\n\n       \/\/ check that the non-fillable attribute is not set on the post instance\n       $this-&gt;assertArrayNotHasKey('author', $post-&gt;getAttributes());\n   }<\/code><\/pre>\n<p>Este c\u00f3digo define dos m\u00e9todos de prueba.<\/p>\n<p>El primero crea una instancia <code>Post<\/code> con los atributos especificados y, utilizando el m\u00e9todo de aserci\u00f3n <code>assertEquals<\/code>, comprueba que has establecido correctamente los atributos <code>title<\/code>, <code>description<\/code> y <code>image<\/code>.<\/p>\n<p>El segundo m\u00e9todo intenta crear una instancia <code>Post<\/code> con un atributo adicional no rellenable (<code>author<\/code>) y afirma que este atributo no est\u00e1 establecido en la instancia del modelo utilizando el m\u00e9todo de aserci\u00f3n <code>assertArrayNotHasKey<\/code>.<\/li>\n<li>Aseg\u00farate de a\u00f1adir la siguiente declaraci\u00f3n <code>use<\/code> en el mismo archivo:\n<pre><code class=\"language-php\">use App\\Models\\Post;<\/code><\/pre>\n<\/li>\n<li>Ejecuta el comando <code>php artisan config:clear<\/code> para borrar la cach\u00e9 de configuraci\u00f3n.<\/li>\n<li>Para ejecutar estas pruebas, ejecuta el siguiente comando:\n<pre><code class=\"language-php\">php artisan test tests\/Unit\/PostModelFunctionalityTest.php<\/code><\/pre>\n<p>Todas las pruebas deber\u00edan pasar, y el terminal deber\u00eda mostrar los resultados y el tiempo total de ejecuci\u00f3n de las pruebas.<\/li>\n<\/ol>\n<h3>Depurar pruebas<\/h3>\n<p>Si las pruebas fallan, puedes depurarlas siguiendo estos pasos:<\/p>\n<ol start=\"1\">\n<li>Revisa el mensaje de error en el terminal. Laravel proporciona mensajes de error detallados que identifican el problema. Lee atentamente el mensaje de error para comprender por qu\u00e9 ha fallado la prueba.<\/li>\n<li>Inspecciona las pruebas y el c\u00f3digo que est\u00e1s probando para identificar discrepancias.<\/li>\n<li>Aseg\u00farate de que has configurado correctamente los datos y dependencias necesarias para la prueba.<\/li>\n<li>Utiliza herramientas de depuraci\u00f3n como la funci\u00f3n <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-vs-wordpress\/#helper-functions\">dd()<\/a> de Laravel para inspeccionar variables y datos en puntos concretos de tu c\u00f3digo de prueba.<\/li>\n<li>Una vez que hayas identificado el problema, haz los cambios necesarios y vuelve a ejecutar las pruebas hasta que pasen.<\/li>\n<\/ol>\n<h2>Pruebas y bases de datos<\/h2>\n<p>Laravel proporciona una forma c\u00f3moda de configurar un entorno de pruebas utilizando una <a href=\"https:\/\/kinsta.com\/es\/blog\/sqlite-vs-mysql\/\">base de datos SQLite<\/a> en memoria, que es r\u00e1pida y no persiste los datos entre ejecuciones de pruebas. Para configurar el entorno de la base de datos de pruebas y escribir pruebas que interact\u00faen con la base de datos, sigue los pasos que se indican a continuaci\u00f3n:<\/p>\n<ol start=\"1\">\n<li>Abre el archivo <strong>phpunit.xml<\/strong> y descomenta las siguientes l\u00edneas de c\u00f3digo:\n<pre><code class=\"language-xml\">&lt;env name=\"DB_CONNECTION\" value=\"sqlite\"\/&gt;\n&lt;env name=\"DB_DATABASE\" value=\":memory:\"\/&gt;<\/code><\/pre>\n<\/li>\n<li>Ejecuta el comando <code>php artisan make:test PostCreationTest --unit<\/code> para crear un nuevo caso de prueba.<\/li>\n<li>Abre el archivo <strong>tests\/Unit\/PostCreationTest.php<\/strong> y sustituye el m\u00e9todo <code>test_example<\/code> por el siguiente c\u00f3digo:\n<pre><code class=\"language-php\">public function testPostCreation()\n   {\n       \/\/ Create a new post and save it to the database\n       $post = Post::create([\n           'title' =&gt; 'Sample Post Title',\n           'description' =&gt; 'Sample Post Description',\n           'image' =&gt; 'sample_image.jpg',\n       ]);\n\n       \/\/ Retrieve the post from the database and assert its existence\n       $createdPost = Post::find($post-&gt;id);\n       $this-&gt;assertNotNull($createdPost);\n       $this-&gt;assertEquals('Sample Post Title', $createdPost-&gt;title);\n   }<\/code><\/pre>\n<\/li>\n<li>Aseg\u00farate de a\u00f1adir la siguiente sentencia <code>use<\/code>:\n<pre><code class=\"language-php\">use App\\Models\\Post;<\/code><\/pre>\n<p>Actualmente, la clase <code>PostCreationTest<\/code> extiende la clase base <code>PHPUnitFrameworkTestCase<\/code>. La clase base se utiliza habitualmente para pruebas unitarias cuando se trabaja con PHPUnit directamente, fuera de Laravel, o cuando se escriben pruebas para un componente no fuertemente acoplado a Laravel. Sin embargo, si necesitas acceder a la base de datos, deber\u00e1s modificar la clase <code>PostCreationTest<\/code> para que extienda la clase <code>TestsTestCase<\/code>.<\/p>\n<p>Esta \u00faltima clase adapta la clase <code>PHPUnitFrameworkTestCase<\/code> a las aplicaciones Laravel. Proporciona funcionalidad adicional y configuraci\u00f3n espec\u00edfica de Laravel, como la siembra de la base de datos y la configuraci\u00f3n del entorno de pruebas.<\/li>\n<li>Aseg\u00farate de sustituir la declaraci\u00f3n <code>use PHPUnitFrameworkTestCase;<\/code> por <code>use TestsTestCase;<\/code>. Recuerda que configuraste el entorno de pruebas para utilizar una base de datos SQLite en memoria. Por tanto, debes migrar la base de datos antes de ejecutar las pruebas. Para ello, utiliza el trait <code>IlluminateFoundationTestingRefreshDatabase<\/code>. Este trait migra la base de datos si el esquema no est\u00e1 actualizado y reinicia la base de datos despu\u00e9s de cada prueba para asegurarse de que los datos de la prueba anterior no interfieren con las pruebas posteriores.<\/li>\n<li>A\u00f1ade la siguiente sentencia <code>use<\/code> al archivo <strong>tests\/Unit\/PostCreationTest.php<\/strong> para incorporar este trait a tu c\u00f3digo:\n<pre><code class=\"language-php\">use Illuminate\\Foundation\\Testing\\RefreshDatabase;<\/code><\/pre>\n<\/li>\n<li>A continuaci\u00f3n, a\u00f1ade la siguiente l\u00ednea de c\u00f3digo justo antes del m\u00e9todo <code>testPostCreation<\/code>:\n<pre><code class=\"language-php\">use RefreshDatabase;<\/code><\/pre>\n<\/li>\n<li>Ejecuta el comando <code>php artisan config:clear<\/code> para borrar la cach\u00e9 de configuraci\u00f3n.<\/li>\n<li>Para realizar esta prueba, ejecuta el siguiente comando:\n<pre><code class=\"language-php\">php artisan test tests\/Unit\/PostCreationTest.php<\/code><\/pre>\n<p>Las pruebas deber\u00edan pasar, y el terminal deber\u00eda mostrar los resultados de la prueba y el tiempo total de la misma.<\/li>\n<\/ol>\n<h2>Pruebas de caracter\u00edsticas<\/h2>\n<p>Mientras que las pruebas unitarias comprueban componentes individuales de la aplicaci\u00f3n de forma aislada, las pruebas de caracter\u00edsticas comprueban partes m\u00e1s amplias del c\u00f3digo, como la forma en que interact\u00faan varios objetos. Las pruebas de caracter\u00edsticas son vitales por varias razones:<\/p>\n<ol start=\"1\">\n<li><strong>Validaci\u00f3n de extremo a extremo<\/strong> \u2014 Confirma que toda la funci\u00f3n funciona a la perfecci\u00f3n, incluidas las interacciones entre varios componentes como controladores, modelos, vistas e incluso la base de datos.<\/li>\n<li><strong>Pruebas de extremo a extremo<\/strong> \u2014 Abarcan todo el flujo de usuario, desde la solicitud inicial hasta la respuesta final, lo que puede descubrir problemas que las pruebas unitarias podr\u00edan pasar por alto. Esta capacidad las hace valiosas para probar recorridos de usuario y escenarios complejos.<\/li>\n<li><strong>Garant\u00eda de la experiencia del usuario<\/strong> \u2014 Imita las interacciones del usuario, ayudando a verificar una experiencia de usuario coherente y que la funci\u00f3n funciona seg\u00fan lo previsto.<\/li>\n<li><strong>Detecci\u00f3n de regresiones<\/strong> \u2014 Detecta regresiones y cambios que rompen el c\u00f3digo al introducir c\u00f3digo nuevo. Si una funci\u00f3n existente empieza a fallar en una prueba de funciones, es se\u00f1al de que algo se ha roto.<\/li>\n<\/ol>\n<p>Ahora, crea una prueba de funcionalidad para <code>PostController<\/code> en el archivo <strong>app\/Http\/Controllers\/PostController.php<\/strong>. C\u00e9ntrate en el m\u00e9todo <code>store<\/code>, validando los datos entrantes y creando y almacenando entradas en la base de datos.<\/p>\n<p>La prueba simula que un usuario crea una nueva entrada a trav\u00e9s de una interfaz web, asegur\u00e1ndose de que el c\u00f3digo almacena la entrada en la base de datos y redirige al usuario a la p\u00e1gina \u00cdndice de Entradas tras la creaci\u00f3n. Para ello, sigue estos pasos:<\/p>\n<ol start=\"1\">\n<li>Ejecuta el comando <code>php artisan make:test PostControllerTest<\/code> para crear un nuevo caso de prueba en el directorio <strong>tests\/Features<\/strong>.<\/li>\n<li>Abre el archivo <strong>tests\/Feature\/PostControllerTest.php<\/strong> y sustituye el m\u00e9todo <code>test_example<\/code> por este c\u00f3digo:\n<pre><code class=\"language-php\">use RefreshDatabase; \/\/ Refresh the database after each test\n\n   public function test_create_post()\n   {\n       \/\/ Simulate a user creating a new post through the web interface\n       $response = $this-&gt;post(route('posts.store'), [\n           'title' =&gt; 'New Post Title',\n           'description' =&gt; 'New Post Description',\n           'image' =&gt; $this-&gt;create_test_image(),\n       ]);\n\n       \/\/ Assert that the post is successfully stored in the database\n       $this-&gt;assertCount(1, Post::all());\n\n       \/\/ Assert that the user is redirected to the Posts Index page after post creation\n       $response-&gt;assertRedirect(route('posts.index'));\n   }\n\n   \/\/ Helper function to create a test image for the post\n   private function create_test_image()\n   {\n       \/\/ Create a mock image file using Laravel's UploadedFile class\n       $file = UploadedFile::fake()-&gt;image('test_image.jpg');\n\n       \/\/ Return the path to the temporary image file\n       return $file;\n   }<\/code><\/pre>\n<p>La funci\u00f3n <code>test_create_post<\/code> simula que un usuario crea una nueva entrada realizando una solicitud <code>POST<\/code> a la ruta <code>posts.store<\/code> con atributos espec\u00edficos, incluida una imagen simulada generada mediante la clase <code>UploadedFile<\/code> de Laravel.<\/p>\n<p>A continuaci\u00f3n, la prueba afirma que el c\u00f3digo ha almacenado correctamente la entrada en la base de datos comprobando el recuento de <code>Post::all()<\/code>. Verifica que el c\u00f3digo redirige al usuario a la p\u00e1gina \u00cdndice de Entradas tras la creaci\u00f3n de la entrada.<\/p>\n<p>Esta prueba garantiza que la funcionalidad de creaci\u00f3n de entradas funciona y que la aplicaci\u00f3n gestiona correctamente las interacciones con la base de datos y las redirecciones tras el env\u00edo de entradas.<\/li>\n<li>A\u00f1ade las siguientes sentencias <code>use<\/code> al mismo archivo:\n<pre><code class=\"language-php\">use App\\Models\\Post;\nuse Illuminate\\Http\\UploadedFile;<\/code><\/pre>\n<\/li>\n<li>Ejecuta el comando <code>php artisan config:clear<\/code> para borrar la cach\u00e9 de configuraci\u00f3n.<\/li>\n<li>Para realizar esta prueba, ejecuta este comando:\n<pre><code class=\"language-php\">php artisan test tests\/Feature\/PostControllerTest.php<\/code><\/pre>\n<p>La prueba deber\u00eda pasar, y el terminal deber\u00eda mostrar los resultados de la prueba y el tiempo total de ejecuci\u00f3n de la misma.<\/li>\n<\/ol>\n<h2>Confirmar la cobertura de la prueba<\/h2>\n<p>La cobertura de las pruebas se refiere a la parte del c\u00f3digo base que comprueban tus pruebas unitarias, de caracter\u00edsticas o de navegador, expresada en porcentaje. Te ayuda a identificar las \u00e1reas no probadas de tu c\u00f3digo base y las \u00e1reas insuficientemente probadas que pueden contener errores.<\/p>\n<p>Herramientas como la funci\u00f3n de cobertura de c\u00f3digo de PHPUnit y el informe de cobertura integrado de Laravel generan informes que muestran qu\u00e9 partes de tu c\u00f3digo base cubren tus pruebas. Este proceso proporciona informaci\u00f3n cr\u00edtica sobre la calidad de tus pruebas y te ayuda a centrarte en las \u00e1reas que podr\u00edan requerir pruebas adicionales.<\/p>\n<h3>Generar un informe<\/h3>\n<ol start=\"1\">\n<li>Elimina los archivos <strong>tests\/Feature\/ExampleTest.php<\/strong> y <strong>tests\/Unit\/ExampleTest.php<\/strong>, ya que no los has modificado y podr\u00edan causar errores.<\/li>\n<li>Ejecuta el comando <code>php artisan test --coverage<\/code> en una ventana de terminal. Deber\u00edas recibir una salida como la siguiente:\n<figure id=\"attachment_74325\" aria-describedby=\"caption-attachment-74325\" style=\"width: 1400px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-74325 size-full\" src=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/code-coverage-report.png\" alt=\"Muestra el n\u00famero total de pruebas superadas y el tiempo de ejecuci\u00f3n de los resultados. Tambi\u00e9n enumera cada componente de tu base de c\u00f3digo y su porcentaje de cobertura del c\u00f3digo.\" width=\"1400\" height=\"590\" srcset=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/code-coverage-report.png 1400w, https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/code-coverage-report-300x126.png 300w, https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/code-coverage-report-1024x432.png 1024w, https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/code-coverage-report-768x324.png 768w\" sizes=\"auto, (max-width: 1400px) 100vw, 1400px\" \/><figcaption id=\"caption-attachment-74325\" class=\"wp-caption-text\">Ejecuci\u00f3n del comando php artisan test &#8211;coverage.<\/figcaption><\/figure>\n<p>El informe de cobertura del c\u00f3digo muestra los resultados de las pruebas, el n\u00famero total de pruebas superadas y el tiempo de ejecuci\u00f3n de los resultados. Tambi\u00e9n enumera cada componente de tu base de c\u00f3digo y su porcentaje de cobertura del c\u00f3digo. Los porcentajes representan la proporci\u00f3n del c\u00f3digo que cubren tus pruebas.<\/p>\n<p>Por ejemplo, <code>Models\/Post<\/code> tiene una cobertura del 100%, lo que significa que todos los m\u00e9todos y l\u00edneas de c\u00f3digo del modelo est\u00e1n cubiertos. El informe de cobertura del c\u00f3digo tambi\u00e9n muestra la <strong>Cobertura Total \u2014<\/strong>\u00a0la cobertura global del c\u00f3digo de toda la base de c\u00f3digo. En este caso, las pruebas cubren s\u00f3lo <strong>el 65,3%<\/strong> del c\u00f3digo.<\/li>\n<li>Para especificar un umbral m\u00ednimo de cobertura, ejecuta el comando <code>php artisan test --coverage --min=85<\/code>. Este comando establece un umbral m\u00ednimo del 85%. Deber\u00edas recibir la siguiente salida:\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/03\/coverage-report-with-minimum.png\" alt=\"Captura de pantalla que muestra el informe de cobertura con un umbral m\u00ednimo del 85%.La l\u00ednea inferior indica que la prueba falla porque no alcanza el umbral m\u00ednimo.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Prueba con un umbral m\u00ednimo del 85%.<\/figcaption><\/figure>\n<p>El conjunto de pruebas falla porque el c\u00f3digo no cumple el umbral m\u00ednimo establecido del 85%.<\/p>\n<p>Aunque lograr una mayor cobertura del c\u00f3digo \u2014 a menudo del 100% \u2014 es el objetivo, es m\u00e1s importante probar a fondo las partes cr\u00edticas y complejas de tu aplicaci\u00f3n.<\/li>\n<\/ol>\n<h2>Resumen<\/h2>\n<p>Si adoptas las mejores pr\u00e1cticas descritas en este art\u00edculo, como escribir pruebas significativas y exhaustivas, respetar el ciclo rojo-verde-refactorizaci\u00f3n en TDD y aprovechar las funciones de prueba que proporcionan Laravel y PHPUnit, podr\u00e1s crear aplicaciones robustas y de alta calidad.<\/p>\n<p>Adem\u00e1s, tienes la opci\u00f3n de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">alojar tu aplicaci\u00f3n Laravel<\/a> con la infraestructura r\u00e1pida, segura y fiable de Kinsta. Adem\u00e1s, puedes utilizar la <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Application-Deployments#operation\/manualDeployApplication\">API de Kinsta<\/a> para iniciar <a href=\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\">despliegues dentro de tus flujos de CI\/CD<\/a> a trav\u00e9s de plataformas como GitHub Actions, CircleCI, etc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Las pruebas unitarias son cruciales en el desarrollo de software, ya que garantizan que los componentes de tu aplicaci\u00f3n funcionan como se espera de ellos de &#8230;<\/p>\n","protected":false},"author":199,"featured_media":74316,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1309,1303],"class_list":["post-74315","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-base-de-datos-mysql","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel\" \/>\n<meta property=\"og:description\" content=\"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-19T08:23:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-22T09:08:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel\",\"datePublished\":\"2024-03-19T08:23:53+00:00\",\"dateModified\":\"2024-03-22T09:08:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\"},\"wordCount\":2962,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\",\"name\":\"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg\",\"datePublished\":\"2024-03-19T08:23:53+00:00\",\"dateModified\":\"2024-03-22T09:08:26+00:00\",\"description\":\"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel - Kinsta\u00ae","description":"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/","og_locale":"es_ES","og_type":"article","og_title":"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel","og_description":"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.","og_url":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2024-03-19T08:23:53+00:00","article_modified_time":"2024-03-22T09:08:26+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel","datePublished":"2024-03-19T08:23:53+00:00","dateModified":"2024-03-22T09:08:26+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/"},"wordCount":2962,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/","url":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/","name":"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg","datePublished":"2024-03-19T08:23:53+00:00","dateModified":"2024-03-22T09:08:26+00:00","description":"Este art\u00edculo destaca la importancia de las pruebas unitarias en las aplicaciones Laravel y lo cruciales que son en el desarrollo de software.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/03\/laravel-unit-testing.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/pruebas-unitarias-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"No te saltes las pruebas unitarias y construye mejores aplicaciones Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/74315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=74315"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/74315\/revisions"}],"predecessor-version":[{"id":74343,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/74315\/revisions\/74343"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/74315\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/74316"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=74315"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=74315"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=74315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}