{"id":458092,"date":"2024-02-13T16:23:41","date_gmt":"2024-02-13T15:23:41","guid":{"rendered":"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/02\/ai-for-php-how-to-automate-unit-testing-using-ai-assistant\/"},"modified":"2025-09-17T09:39:21","modified_gmt":"2025-09-17T08:39:21","slug":"ai-for-php-how-to-automate-unit-testing-using-ai-assistant","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/es\/phpstorm\/2024\/02\/ai-for-php-how-to-automate-unit-testing-using-ai-assistant\/","title":{"rendered":"IA para PHP: c\u00f3mo automatizar las pruebas de unidad con AI Assistant"},"content":{"rendered":"<p>Pruebas. Si se parece un poco a m\u00ed, estar\u00e1 de acuerdo en que es algo tan importante como aburrido. Es una de esas cosas que no se disfrutan mucho mientras se hacen, pero que se sabe que reportar\u00e1n dividendos m\u00e1s adelante.<\/p>\n<p>Entonces \u00bfpor qu\u00e9 las pruebas son tan poco gratificantes?<\/p>\n<p>Para m\u00ed, el mayor obst\u00e1culo es el gran esfuerzo que conlleva la <strong>configuraci\u00f3n inicial<\/strong>. S\u00e9 que una vez que tenga una prueba configurada, podr\u00e9 modificarla y retocarla a lo largo de la vida del proyecto. Pero <em>empezar<\/em> es lo que m\u00e1s me cuesta.<\/p>\n<p>\u00bfY si esa configuraci\u00f3n inicial de escribir una prueba <strong>pudiera simplificarse<\/strong>? \u00bfY si pudi\u00e9ramos obtener gratuitamente el borrador de una prueba, utilizarlo como punto de partida y simplemente modificarlo seg\u00fan sea necesario? \u00bfY si pudi\u00e9ramos dedicarnos a las partes divertidas y hacer que un ordenador se encargara de las aburridas?<\/p>\n<p>Aqu\u00ed es donde la IA puede ayudarnos.<\/p>\n<p>Recientemente, hemos a\u00f1adido una potente herramienta a <a href=\"https:\/\/www.jetbrains.com\/es-es\/ides\/\" target=\"_blank\" rel=\"noopener\">todos nuestros IDE<\/a>, incluido <a href=\"https:\/\/www.jetbrains.com\/phpstorm\/\" target=\"_blank\" rel=\"noopener\">PhpStorm<\/a>: <a href=\"https:\/\/www.jetbrains.com\/es-es\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI Assistant<\/a>. En este art\u00edculo del blog, me gustar\u00eda analizar c\u00f3mo podemos utilizar AI Assistant para automatizar las partes aburridas de la programaci\u00f3n, para as\u00ed poder centrarnos en las partes m\u00e1s emocionantes de las pruebas.<\/p>\n<h2 class=\"wp-block-heading\">Pruebas de unidad automatizadas con AI Assistant<\/h2>\n<p>La generaci\u00f3n de pruebas de unidad es un ejemplo perfecto de c\u00f3mo AI Assistant puede ayudarnos. Consideremos el siguiente fragmento de c\u00f3digo:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/v-G-4cEyCGjq_NQtmr1Wp2tjFwTxO9P-aB_Agy6rwkFnZOXDl8BIcXx8-0iiGlrkeltbwUE_467nyKM5OoU0b9u8WgIFlIF8bjidXj2H4QcUNhQ71lUUxTXKe4MostqJnmAttmeGsCRLo5S6hxCUoHY.png\" alt=\"\" \/><\/figure>\n<p>Este es un fragmento tomado de un proyecto llamado RFC Vote, que es de c\u00f3digo abierto. Encontrar\u00e1 el c\u00f3digo fuente completo <a href=\"https:\/\/github.com\/brendt\/rfc-vote\/blob\/main\/app\/Actions\/CreateArgumentComment.php\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>. Este proyecto permite a la comunidad PHP debatir sobre las solicitudes de comentarios (RFC) abiertas. Los usuarios pueden esgrimir argumentos a favor y en contra, y mantener debates constructivos sobre la evoluci\u00f3n de PHP.<\/p>\n<p>Esta clase concreta se encarga de crear un comentario sobre un argumento existente. Un comentario pertenece a un usuario, tiene una referencia a un argumento y tiene un cuerpo. Por \u00faltimo, cada vez que se escriba un comentario, se enviar\u00e1n notificaciones a todos los usuarios que sigan un argumento espec\u00edfico.<\/p>\n<p>Utilicemos AI Assistant para que nos estructure una prueba y veamos lo que es capaz de hacer.<\/p>\n<p>Comience situando el cursor en el cuerpo de este m\u00e9todo <code>__invoke<\/code> y, a continuaci\u00f3n, pulse <em>Alt+Intro<\/em> y seleccione <em>AI Actions | Generate Unit Tests<\/em> en el men\u00fa contextual.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/I-bEq5upCmf901SnuyGv_mr2qg3687h7tGyk4hj2ZcjylhVXuhSu4gdq8TxSDR5oj4VrkpDGHZmGf6Yo6RLoj1D6gbhCDpbv3foINrV5p_enEd83Nnna7knWBtaSE8ORra-g5nb6cN5gSadv6aGobK0.png\" alt=\"\" \/><\/figure>\n<p>AI Assistant esbozar\u00e1 ahora un borrador de una prueba para esta clase. Si desea saber c\u00f3mo hace todo esto AI Assistant, puede leer <a href=\"https:\/\/blog.jetbrains.com\/es\/blog\/2023\/12\/06\/presentamos-jetbrains-ai-y-ai-assistant-integrado-en-los-ide\/\">este art\u00edculo<\/a>. Cuando AI Assistant haya terminado, ver\u00e1 una versi\u00f3n del borrador como esta:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/QPyq1vkGrACdNapVwimBfDVsHxWtuH002YQxDnS-CPPdLRvBhGXZf6ImEJgNg-PPmKlNEjyYSUp4qTObKbzi5wUe8k88HefY0bjqaVjHegfMfecBsVbUvaD-ygYWEWKh0EWMMucgi5wZgdHAyDNj1Ls.png\" alt=\"\" \/><\/figure>\n<p>La acci\u00f3n m\u00e1s directa es pulsar el bot\u00f3n <em>Accept all<\/em>, lo que crear\u00e1 un nuevo archivo de prueba en la ubicaci\u00f3n correcta y copiar\u00e1 este borrador de implementaci\u00f3n en el archivo de prueba real. No obstante, tambi\u00e9n puede pulsar el bot\u00f3n <em>Refresh<\/em>para generar una implementaci\u00f3n completamente nueva si ha detectado alg\u00fan problema evidente.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/ZFFNyMpatMxIazGB9ATwUmXBF9Olr_9GdHjdVhZ2IwK5eWYXTVlknETuCSpS4I1yIX1uumhI4M9H0JL9vzw8tt07wxsAmx4jEBxRwmz-DG_LflZTXrS3_TOccyOSJvPkQn0Mw_9AkxClhDJGQ-cYn7s.png\" alt=\"\" \/><\/figure>\n<p>En mi caso, actualic\u00e9 una o dos veces, puls\u00e9 <em>Accept all<\/em> y ejecut\u00e9 mi prueba.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/2gGC7xtkbo_OtP5zg7_uX6PwbDILcftIkG6psWGzTWNtkFRCa9zzpLa7rG6wv6Dkjl3qEhMiQb2JoHQcqhRyNM2yXmaUjqPfelhIMTtMy_IuNOxyIJz9UP5eMTbeO8i1Po1I_7GTFDuyt-EOpS-3QAA.png\" alt=\"\" \/><\/figure>\n<p>No est\u00e1 mal, \u00bfverdad?<\/p>\n<p>Ahora, espere. Hay un par de detalles m\u00e1s que se\u00f1alar.<\/p>\n<p>En primer lugar, no todas las generaciones funcionar\u00e1n sin problemas desde el principio. Por ejemplo, algunas versiones inclu\u00edan la caracter\u00edstica <code>RefreshDatabase<\/code>, una pr\u00e1ctica com\u00fan en las pruebas de Laravel. Sin embargo, en este proyecto, tengo las pruebas de la base de datos configuradas de forma un poco diferente, por lo que tuve que hacer un peque\u00f1o ajuste en el resultado generado. A veces, AI Assistant tambi\u00e9n genera c\u00f3digo que no se adapta totalmente a su estilo de c\u00f3digo. Hace todo lo posible por tener en cuenta los ajustes de estilo del c\u00f3digo, pero algunos detalles son dif\u00edciles de acertar.<\/p>\n<p>A pesar de algunas deficiencias, tenga en cuenta que nuestro objetivo no es generar la prueba perfecta, sino <strong>disponer de una estructura<\/strong> que nos sirva de base. AI Assistant es sorprendentemente bueno a la hora de entender el contexto de lo que queremos probar, y hace muchas cosas bien. Ahorra tiempo y nos permite centrarnos en las partes m\u00e1s emocionantes de las pruebas.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/es-es\/ai\/\" target=\"\" rel=\"noopener\">M\u00e1s informaci\u00f3n sobre AI Assistant<\/a><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Automatizaci\u00f3n de Pest<\/h2>\n<p>2023 ha <a href=\"https:\/\/www.jetbrains.com\/es-es\/lp\/devecosystem-2023\/php\/#php_testing\" target=\"_blank\" rel=\"noopener\">mostrado un crecimiento significativo<\/a> del relativamente nuevo marco de pruebas Pest. En PhpStorm <a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2023\/10\/the-pest-plugin-is-now-maintained-by-jetbrains\/\">tambi\u00e9n nos hicimos cargo del desarrollo del complemento Pest<\/a> el a\u00f1o pasado. En estos momentos, la compatibilidad de AI Assistant con Pest es un trabajo en curso, y estar\u00e1 disponible en la pr\u00f3xima versi\u00f3n principal: PhpStorm 2024.1. No se lo pierda: le demostraremos c\u00f3mo los usuarios de Pest pueden sacar partido de AI Assistant en nuestros pr\u00f3ximos art\u00edculos del blog.<\/p>\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n<p>Ser capaz de estructurar las pruebas de unidad de forma autom\u00e1tica \u2015con un trabajo manual m\u00ednimo\u2015 ya es bastante impresionante, pero a\u00fan se puede optimizar el proceso.<\/p>\n<p>Eche un vistazo a <a href=\"https:\/\/blog.jetbrains.com\/es-es\/phpstorm\/2024\/02\/ai-for-php-how-to-tweak-ai-prompts-to-improve-php-tests\/\">nuestro pr\u00f3ximo art\u00edculo del blog de esta serie<\/a>, en el que analizaremos m\u00e1s detenidamente c\u00f3mo podemos optimizar la generaci\u00f3n de pruebas con JetBrains AI Assistant para ahorrar a\u00fan m\u00e1s tiempo. <strong>Suscr\u00edbase a nuestro blog<\/strong> en la secci\u00f3n de suscripci\u00f3n que encontrar\u00e1 m\u00e1s abajo y no se pierda nuestras novedades.<\/p>\n<h2 class=\"wp-block-heading\">Enlaces \u00fatiles<\/h2>\n<p><strong>Recursos:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/es-es\/phpstorm\/2024\/02\/ai-for-php-how-to-tweak-ai-prompts-to-improve-php-tests\/\">IA para PHP: c\u00f3mo optimizar las peticiones a la IA para mejorar las pruebas de PHP <\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/phpstorm\/ai-assistant.html\" target=\"_blank\" rel=\"noopener\">AI Assistant en PhpStorm<\/a> (documentaci\u00f3n)<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/es-es\/phpstorm\/laravel\/\" target=\"_blank\" rel=\"noopener\">Compatibilidad de Laravel con PhpStorm<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/es-es\/ai\/#plans-and-pricing\" target=\"_blank\" rel=\"noopener\">Precios de AI Assistant<\/a><\/li>\n<\/ul>\n<p><strong>V\u00eddeos:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/-NnYtfzO7qU?feature=shared\" target=\"_blank\" rel=\"noopener\">Presentaci\u00f3n de JetBrains AI Assistant<\/a><\/li>\n<li><a href=\"https:\/\/youtu.be\/k8EzKJDlbFo?feature=shared\" target=\"_blank\" rel=\"noopener\">Utilizaci\u00f3n de PHP y de la IA para crear un convertidor de Markdown a v\u00eddeo<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-lIUuQWJRPk\" target=\"_blank\" rel=\"noopener\">C\u00f3mo convertir PHPUnit a Pest en 5 segundos<\/a><\/li>\n<\/ul>\n<p><em>Art\u00edculo original en ingl\u00e9s de:<br \/><\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":443702,"comment_status":"closed","ping_status":"closed","template":"","categories":[2347],"tags":[8168,8337,443],"cross-post-tag":[8396],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm\/458092"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/phpstorm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=458092"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm\/458092\/revisions"}],"predecessor-version":[{"id":618098,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm\/458092\/revisions\/618098"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/443702"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=458092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=458092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=458092"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=458092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}