{"id":458104,"date":"2024-02-23T12:04:11","date_gmt":"2024-02-23T11:04:11","guid":{"rendered":"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/02\/ai-for-php-how-to-make-ai-assistant-generate-test-implementations\/"},"modified":"2025-09-17T09:37:48","modified_gmt":"2025-09-17T08:37:48","slug":"ai-for-php-how-to-make-ai-assistant-generate-test-implementations","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/es\/phpstorm\/2024\/02\/ai-for-php-how-to-make-ai-assistant-generate-test-implementations\/","title":{"rendered":"IA para PHP: c\u00f3mo generar implementaciones de pruebas con AI Assistant"},"content":{"rendered":"<p>Comenzamos <a href=\"https:\/\/blog.jetbrains.com\/es-es\/phpstorm\/2024\/02\/how-to-generate-php-tests-with-jetbrains-ai-assistant\/\">esta serie<\/a> examinando c\u00f3mo <a href=\"https:\/\/www.jetbrains.com\/es-es\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI Assistant<\/a> puede generar pruebas a partir de una implementaci\u00f3n existente. Pero \u00bfqu\u00e9 pasa si queremos utilizar AI Assistant al rev\u00e9s? \u00bfQu\u00e9 pasa si queremos adoptar un enfoque de desarrollo basado en pruebas, escribiendo primero nuestras pruebas y luego permitiendo que AI Assistant genere una implementaci\u00f3n para nosostros?<\/p>\n<p>Echemos un vistazo a c\u00f3mo podemos hacerlo.<\/p>\n<h2 class=\"wp-block-heading\">Generar c\u00f3digo con el chat de AI Assistant<\/h2>\n<p>El primer paso para generar una implementaci\u00f3n es tener una prueba en su lugar. Supongamos que estamos construyendo un bus de comandos y tenemos la siguiente prueba:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/OcgTucNO41d-FPqUFaEmmmHT8e7ClqFk9eTgj3cuoIchYBjdAgfAOXoOzvplGJAsUHH1mJLJpUP5qLS7B3pKYDiQcRQG6OcKcZAHm1FJeUtOifJm7xGOi60cTWswDGyQHS9RdsgI77QAxzru76P56BQ.png\" alt=\"\" \/><\/figure>\n<p>No hemos escrito nada m\u00e1s: a\u00fan no existe la clase <code>CommandBus<\/code>, y mucho menos una implementaci\u00f3n para los m\u00e9todos <code>handle<\/code> y <code>getHistory<\/code>. Utilicemos AI Assistant para que genere la implementaci\u00f3n por nosotros. Para empezar, abra el men\u00fa <em>AI Actions<\/em> seleccionando el texto y pulsando <em>Alt+Intro \/ \u2325Intro<\/em>. A continuaci\u00f3n, seleccione <em>New Chat Using Selection<\/em>:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/vqtpv5ftmzrAWfGN7Yjf0iYVOf_aoY0DC17qrsstEoLqWA6yIgGHB_h8R5YnjwPUE67sTMPvkwvA0cSMeJWK9sGXui_4UfXX4MRcjck_3KDHizKYuChDcnaSBCmN1iZJslpEgn7LwvlR-hOF_e8ijOg.png\" alt=\"\" \/><\/figure>\n<p><a href=\"https:\/\/www.jetbrains.com\/es-es\/phpstorm\/\" target=\"_blank\" rel=\"noopener\">PhpStorm<\/a> abrir\u00e1 la ventana de chat de <em>AI Assistant<\/em>. Aqu\u00ed puede chatear con AI Assistant y preguntarle lo que desee. El fragmento de c\u00f3digo seleccionado ya estar\u00e1 presente en la ventana de chat, as\u00ed que hagamos una petici\u00f3n simple: \u00abwrite an implementation for this test\u00bb (escribe una implementaci\u00f3n para esta prueba):<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/MjBTRSFs5eyMWCCnyxARN4YQJ5Zwz7sD1acH6YEB0C7ctohFgrO-HLqufD_EU3k4GpBYNCM8wIliX7f3JAIHNlsFk58s5suZ0setdi4WeIdHnaLJFij9wOU-iagGkma90escovdaMjzcsaR5rS5_QGA.png\" alt=\"\" \/><\/figure>\n<p>En pocos segundos, AI Assistant tendr\u00e1 la implementaci\u00f3n lista:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/6GwpIdGYJQ0G6AOr3ifqvSkMuM9unAwAPinxKSxpItLqn1BMhEmdRczoQ4Sfh4fgAcLYlymcg-xeuB_pXUQvl9VDvxFo5M0c0VWRTgh136bw0WqOF1XVRC7s0yl6epkTqh9EGxQqhCSZzzOVBKuVUSg.png\" alt=\"\" \/><\/figure>\n<p>Copiemos este c\u00f3digo en un archivo y ejecutemos nuestra prueba para ver qu\u00e9 sucede:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/R_fCNsUtGcXwolmLNq-Ik58seRh7wD9UXPwvF7L4qoYrFKmSxY9oZiiW4ddPx7Ewq2ZXAD45e9O7f2KoQP10PA-X1IOqMUBPMDw8T6g9VoaxyniWI3Qt-CD_gijD_CM3oQ7N_otkULHnhTEzjc2yR-Y.png\" alt=\"\" \/><\/figure>\n<p>\u00a1Funciona! AI Assistant ha escrito una implementaci\u00f3n funcional para nuestra prueba. Al revisar el c\u00f3digo, parece una implementaci\u00f3n s\u00f3lida, aunque cambiaremos algunos detalles estil\u00edsticos. Nuestro objetivo con AI Assistant a lo largo de esta serie no ha sido que AI Assistant escriba el c\u00f3digo perfecto por nosotros, sino generar el c\u00f3digo reutilizable m\u00e1s aburrido que podemos utilizar como punto de partida, lo que nos permite ahorrar un tiempo muy valioso. \u00a1Y eso es exactamente lo que ha hecho AI Assistant!<\/p>\n<p>\u00bfQu\u00e9 pasa si queremos utilizar esta petici\u00f3n varias veces? \u00bfEs posible reutilizarla?<\/p>\n<p>\u00a1Por supuesto!<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/es-es\/ai\/#plans-and-pricing\" target=\"\" rel=\"noopener\">Probar AI Assistant<\/a><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Guardar peticiones personalizadas<\/h2>\n<p>Abra el men\u00fa <em>AI Actions<\/em> pulsando <em>Alt+Intro \/ \u2325Intro<\/em> en alg\u00fan lugar dentro del c\u00f3digo. En lugar de elegir un elemento de men\u00fa existente, haga clic en el enlace <em>Add Your Prompt<\/em> en la parte inferior:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/reaoxLgYJmqMTsjMmAL6kSqcU7zsQhSeT5pkRuf-yny6dfo-bYYApsiVGMiHaE7SDE3TXeGpNauISkUUW7gBk2phYbw338Vk6iMzHHio5btnZQ604VvZuNOoSk_2EXW18kLJhNL0yzWL2JRDRKUalMQ.png\" alt=\"\" \/><\/figure>\n<p>PhpStorm le permite escribir peticiones personalizadas y guardarlas como acciones de IA personalizadas, que es lo que queremos hacer en este caso. Dentro de estas peticiones puede utilizar la variable <code>$SELECTION<\/code>, que contendr\u00e1 el c\u00f3digo seleccionado al invocar su petici\u00f3n personalizada.<\/p>\n<p>Escribamos una petici\u00f3n para nuestro caso de uso: crear la implementaci\u00f3n para una prueba seleccionada:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/ePkUUeMLIwXZpXkISTVlkCHLcFxQQZdj7wuijXrgLYkFvgT1J9cZdo5xUJ_VsoRyznIL7-dBf0HUdaEEPPbIdKYr-INs4EDmkDY3p2e2GbGFfkN5fSyzKHEVPBwNUEuUH_IKY9wT1SZvOd7fJEObVrs.png\" alt=\"\" \/><\/figure>\n<p>\u00a1Intent\u00e9moslo! Seleccione la prueba de nuevo, presione <em>Alt+Intro \/ \u2325Intro<\/em> para abrir el men\u00fa <em>AI Actions<\/em> \u00a1y ver\u00e1 c\u00f3mo la acci\u00f3n personalizada <em>Write Implementation<\/em> ahora est\u00e1 disponible!<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/mvO8Rs5U7K-JOWWfGyPk4OG1ZITHsrk72CvyCydr6pwt4Kz2rst_zdTZ_sxYYPuQeXjSiWjJ3BaDPwZwG6YAh2iZvRe88PiBAk1E4Sj4pvcoSkEl0cUTmalXkNoVAioL0jg59NSzQOlhiUGGpOj6TZQ.png\" alt=\"\" \/><\/figure>\n<p>Seleccione la acci\u00f3n y ver\u00e1 que PhpStorm escribe inmediatamente el mensaje correcto a AI Assistant, \u00a1lo que nos permite reutilizar nuestra acci\u00f3n asistida por IA!<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/Z-nU9TmmfUVHY8o1B-VQcxe6rnbfGxD7w_5LtbxungwCxgQjiaAOIPUSwg1aDH_j60tHNJ11nkRBllYfXjRqHY5Du-qqyyNk4t4H_pMlFEl5ArtK127hYnY2kzZsjQgmRM0nla1pxt4OkmJvqMqDk_M.png\" alt=\"\" \/><\/figure>\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n<p>A lo largo de <a href=\"https:\/\/blog.jetbrains.com\/es-es\/phpstorm\/2024\/02\/how-to-generate-php-tests-with-jetbrains-ai-assistant\/\">esta serie<\/a> hemos visto varios ejemplos de c\u00f3mo podemos utilizar AI Assistant en nuestro beneficio. No esperamos que escriba c\u00f3digo perfecto, pero lo utilizamos para generar c\u00f3digo reutilizable que podamos usar de punto de partida. Resulta interesante ver el nivel de correcci\u00f3n del c\u00f3digo que escribe AI Assistant, y espero ver c\u00f3mo mejora a\u00fan m\u00e1s en las pr\u00f3ximas versiones.<\/p>\n<p>Personalmente, no creo que la IA reemplace a los programadores reales a corto plazo, pero s\u00ed creo que es una herramienta genial que puede ayudar a acelerar el proceso de escribir c\u00f3digo, especialmente en las partes rutinarias, para que as\u00ed podamos concentrarnos en las partes del c\u00f3digo que m\u00e1s importan.<\/p>\n<p>\u00bfCu\u00e1les son sus expectativas en relaci\u00f3n con la asistencia de la IA en su trabajo? \u00a1D\u00e9jenos su opini\u00f3n en los comentarios!<\/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\">Enlaces \u00fatiles<\/h2>\n<p>\u00bfLe ha gustado este art\u00edculo? Aqu\u00ed puede ver otros art\u00edculos de esta serie:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/es-es\/phpstorm\/2024\/02\/ai-for-php-how-to-automate-unit-testing-using-ai-assistant\/\">IA para PHP: C\u00f3mo automatizar las pruebas de unidades utilizando AI Assistant<\/a><\/li>\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 ajustar las peticiones a la IA para mejorar las pruebas de PHP<\/a><\/li>\n<\/ul>\n<p><strong>Recursos:<\/strong><\/p>\n<ul>\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\/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<\/ul>\n<p><em>Art\u00edculo original en ingl\u00e9s de:<br \/>\n<\/em><\/p>\n<div class=\"about-author \">\n<div class=\"about-author__box\">\n<div class=\"row\">\n<div class=\"about-author__box-img\"><img decoding=\"async\" loading=\"lazy\" class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/cef66d348f7def8f4634963a7e7a05e4.png\" alt=\"Luiz Di Bella\" width=\"200\" height=\"200\" \/><\/div>\n<div class=\"about-author__box-text\">\n<div class=\"copy-heading\">\n<h4 id=\"brent-roose\"><span class=\"copy-title\">Brent Roose<\/span><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1086,"featured_media":447497,"comment_status":"closed","ping_status":"closed","template":"","categories":[2347],"tags":[8168,8337],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm\/458104"}],"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=458104"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm\/458104\/revisions"}],"predecessor-version":[{"id":617998,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/phpstorm\/458104\/revisions\/617998"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/447497"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=458104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=458104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=458104"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=458104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}