{"id":806,"date":"2019-10-09T18:52:32","date_gmt":"2019-10-10T01:52:32","guid":{"rendered":"https:\/\/rosolutions.com.mx\/blog\/?p=806"},"modified":"2019-10-09T18:52:32","modified_gmt":"2019-10-10T01:52:32","slug":"pruebas-automatizadas-en-javascript-que-son-como-funcionan","status":"publish","type":"post","link":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/","title":{"rendered":"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan?"},"content":{"rendered":"\n<p>Si eres un desarrollador, sin importar tu lenguaje favorito, seguramente haz escuchado hablar sobre <em>testing <\/em>(pruebas). Existen distintos tipos, como unitarias, de integraci\u00f3n, etc., pero podemos resumir (al menos para este post) que se trata de un proceso por el cual nos aseguramos que el funcionamiento de nuestro c\u00f3digo sea el esperado, y que mejor a\u00fan si lo podemos realizar de manera autom\u00e1tica.<\/p>\n\n\n\n<p>En RO Solutions desarrollamos principalmente en Javascript, por lo que nos vamos a enfocar espec\u00edficamente en este lenguaje y que significa hacer <em>testing automatizado<\/em> en el.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son?<\/h2>\n\n\n\n<p>Una prueba automatizada es un pedazo de c\u00f3digo que mostrara un error cuando encuentre un funcionamiento o resultado inesperado. Pongamos un ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"background-color: #eee; border-radius: 2px; padding: 0.5em; margin-bottom: 25px;\"><code>const sum = (a, b) =&gt; a + b;\n\nconst result = sum(5, 4);\nconst expected = 10;\n\nif (result !== expected) {\n    throw new Error(`${result} no es igual a ${expected}`);\n}<\/code><\/pre>\n\n\n\n<p>En el c\u00f3digo anterior, contamos con una funci\u00f3n que suma dos valores, una variable donde asignamos el resultado esperado y si el resultado de la suma no coincide con el resultado esperado arrojamos un error. <\/p>\n\n\n\n<p>Esta es la forma m\u00e1s fundamental de una prueba, sin embargo, no parece muy practico, el mensaje de error no nos indica la causa del error y estamos a\u00f1adiendo c\u00f3digo que no aporta ninguna funcionalidad a parte de las pruebas. \u00bfC\u00f3mo podemos mejorar esto?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Assertion Library <\/h2>\n\n\n\n<p>\u00bfQu\u00e9 es una librer\u00eda de aserciones (<em>assertion library<\/em>)?, \u00bfqu\u00e9 es una aserci\u00f3n?. Podemos definir una aserci\u00f3n como una afirmaci\u00f3n o validaci\u00f3n de un supuesto, por lo que una librer\u00eda de aserciones es un conjunto de funciones que nos permitan hacer estas validaciones.<\/p>\n\n\n\n<p>Vamos a poner un ejemplo utilizando el mismo caso anterior:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"background-color: #eee; border-radius: 2px; padding: 0.5em; margin-bottom: 25px;\"><code>const {sum, subtract} = require('..\/math');\n\nconst resultSum = sum(5, 4);\nconst resultSubtract = subtract(5,4);\nconst expected = 10;\n\n\/\/ Aqu\u00ed estamos corriendo nuestras pruebas\nexpect(resultSum).toEqual(expected);\nexpect(resultSubtract).toBeLowerThan(expected);\n\n\/\/ Assertion library\nfunction expect(actual) {\n  return {\n    toEqual(expected) {\n      if (actual !== expected) {\n        throw new Error(`${actual} is not equal to ${expected}`);\n      }\n    },\n    toBeLowerThan(expected) { ... },\n    toBeGreaterThan(expected) { ... },\n  }\n}<\/code><\/pre>\n\n\n\n<p>Similar al caso anterior, vamos a probar el resultado de una funci\u00f3n de suma y otra de resta; esta vez vamos a simular un documento de pruebas (un documento donde se encuentran todas nuestras pruebas por separado del c\u00f3digo de implementaci\u00f3n) el cual vamos a ejecutar cuando deseemos probar nuestro c\u00f3digo.<\/p>\n\n\n\n<p>Comenzamos por importar las funciones, las ejecutamos y verificamos los resultados haciendo uso de una nueva funci\u00f3n llamada <strong><em>expect<\/em><\/strong> (nuestra librer\u00eda de aserciones) que retorna distintas funciones (aserciones), mismas que usaremos para realizar las pruebas. En esencia esa es la funci\u00f3n de una librer\u00eda, proveer herramientas, lo m\u00e1s abstractas posibles, que nos permitan realizar las validaciones o aserciones  que necesitamos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"> Testing Framework <\/h2>\n\n\n\n<p>Nuestras pruebas automatizadas van tomando forma, sin embargo aun nos encontramos con limitaciones, por ejemplo, si una prueba falla, las siguientes pruebas no se realizaran e identificar cual dio el error podr\u00eda ser complicado pues es la misma funci\u00f3n quien arroja el error. Es el trabajo de un marco de pruebas (<em>testing framework<\/em>) ayudar a los desarrolladores a identificar r\u00e1pidamente donde se encuentran los problemas. Vamos a crear el nuestro.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"background-color: #eee; border-radius: 2px; padding: 0.5em; margin-bottom: 25px;\"><code>function test(title, callback) {\n  try {\n    callback();\n    console.log(`\u2713 ${title}`);\n  } catch (error) {\n    console.error(`x ${title}`);\n    console.error(error);\n  }\n}<\/code><\/pre>\n\n\n\n<p>Esta peque\u00f1a funci\u00f3n nos va permitir encapsular y realizar distintas pruebas, adem\u00e1s de mostrar los errores de forma que nos permitan solucionar los problemas m\u00e1s f\u00e1cilmente. Vamos a verla en acci\u00f3n continuando con nuestro ejemplo.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"background-color: #eee; border-radius: 2px; padding: 0.5em; margin-bottom: 25px;\"><code>const {sum, subtract} = require('..\/math');\nconst {test, expect} = require('..\/testing');\n\ntest('sum adds numbers', () =&gt; {\n  const result = sum(5, 4);\n  const expected = 10;\n  expect(result).toEqual(expected);\n});\n\ntest('subtract subtracts numbers', () =&gt; {\n  const result = subtract(5, 4);\n  const expected = 1;\n  expect(result).toEqual(expected);\n});<\/code><\/pre>\n\n\n\n<p>El resultado se muestra en la imagen a continuaci\u00f3n. Donde vemos que fallo la primer prueba y la segunda fue ejecutada con \u00e9xito.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"665\" height=\"258\" src=\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/pruebas.jpg\" alt=\"\" class=\"wp-image-810\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Como vemos, nuestra <em>assertion library<\/em> y <em>testing framework<\/em> pueden ser reutilizados y al final nuestras pruebas quedan reducidas \u00fanicamente al c\u00f3digo que necesitamos para realizar las aserciones, con la seguridad de que nos entregaran mensajes claros que nos ayuden a resolver los problemas.<\/p>\n\n\n\n<p>El prop\u00f3sito de este post no es motivarlos a escribir su propio <em>testing framework<\/em> o ense\u00f1ar como hacer el mejor testing a nuestro c\u00f3digo, sino el de explicar que son las pruebas automatizadas y como funcionan, para que la pr\u00f3xima vez que utilicen <a href=\"https:\/\/jestjs.io\/\">Jest<\/a> o alguno de los sabores de <a href=\"https:\/\/github.com\/testing-library\">Testing Library<\/a> puedan entender y utilizar mejor esas herramientas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si eres un desarrollador, sin importar tu lenguaje favorito, seguramente haz escuchado hablar sobre testing (pruebas). Existen distintos tipos, como unitarias, de integraci\u00f3n, etc., pero podemos resumir (al menos para este post) que se trata de un proceso por el cual nos aseguramos que el funcionamiento de nuestro c\u00f3digo sea el esperado, y que mejor [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":812,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,7,34],"tags":[],"class_list":["post-806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo","category-desarrollo-de-software-a-la-medida","category-software"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan? &#8212; Desarrollo de software<\/title>\n<meta name=\"description\" content=\"Expertos en Desarrollo de Software, Aplicaci\u00f3nes M\u00f3viles, Sistemas Web, SEO, Marketing y Dise\u00f1o Web.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan? &#8212; Desarrollo de software\" \/>\n<meta property=\"og:description\" content=\"Expertos en Desarrollo de Software, Aplicaci\u00f3nes M\u00f3viles, Sistemas Web, SEO, Marketing y Dise\u00f1o Web.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\" \/>\n<meta property=\"og:site_name\" content=\"Desarrollo de software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/rosolutionsmx\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-10T01:52:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jose Luis Vega\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ROSolutionsmx\" \/>\n<meta name=\"twitter:site\" content=\"@ROSolutionsmx\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jose Luis Vega\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\"},\"author\":{\"name\":\"Jose Luis Vega\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/person\/70c6c9519e7ee22a4f8259c1bdc4af21\"},\"headline\":\"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan?\",\"datePublished\":\"2019-10-10T01:52:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\"},\"wordCount\":642,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png\",\"articleSection\":[\"Desarrollo\",\"Programaci\u00f3n\",\"Software\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\",\"url\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\",\"name\":\"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan? &#8212; Desarrollo de software\",\"isPartOf\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png\",\"datePublished\":\"2019-10-10T01:52:32+00:00\",\"description\":\"Expertos en Desarrollo de Software, Aplicaci\u00f3nes M\u00f3viles, Sistemas Web, SEO, Marketing y Dise\u00f1o Web.\",\"breadcrumb\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage\",\"url\":\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png\",\"contentUrl\":\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png\",\"width\":1000,\"height\":600,\"caption\":\"Automated testing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\/\/rosolutions.com.mx\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#website\",\"url\":\"https:\/\/rosolutions.com.mx\/blog\/\",\"name\":\"Desarrollo de software\",\"description\":\"Blog de RO Solutions\",\"publisher\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/rosolutions.com.mx\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#organization\",\"name\":\"RO Solutions\",\"url\":\"https:\/\/rosolutions.com.mx\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2018\/03\/icono-01-2.png\",\"contentUrl\":\"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2018\/03\/icono-01-2.png\",\"width\":350,\"height\":346,\"caption\":\"RO Solutions\"},\"image\":{\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/rosolutionsmx\/\",\"https:\/\/x.com\/ROSolutionsmx\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/person\/70c6c9519e7ee22a4f8259c1bdc4af21\",\"name\":\"Jose Luis Vega\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/6ca4660b012176223ef0f1a48ba9dbce267a49c3ce6e42003fcb7b144b5fe313?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6ca4660b012176223ef0f1a48ba9dbce267a49c3ce6e42003fcb7b144b5fe313?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6ca4660b012176223ef0f1a48ba9dbce267a49c3ce6e42003fcb7b144b5fe313?s=96&d=mm&r=g\",\"caption\":\"Jose Luis Vega\"},\"sameAs\":[\"http:\/\/rosolutions.com.mx\"],\"url\":\"https:\/\/rosolutions.com.mx\/blog\/author\/wafo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan? &#8212; Desarrollo de software","description":"Expertos en Desarrollo de Software, Aplicaci\u00f3nes M\u00f3viles, Sistemas Web, SEO, Marketing y Dise\u00f1o Web.","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:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/","og_locale":"es_MX","og_type":"article","og_title":"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan? &#8212; Desarrollo de software","og_description":"Expertos en Desarrollo de Software, Aplicaci\u00f3nes M\u00f3viles, Sistemas Web, SEO, Marketing y Dise\u00f1o Web.","og_url":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/","og_site_name":"Desarrollo de software","article_publisher":"https:\/\/www.facebook.com\/rosolutionsmx\/","article_published_time":"2019-10-10T01:52:32+00:00","og_image":[{"width":1000,"height":600,"url":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png","type":"image\/png"}],"author":"Jose Luis Vega","twitter_card":"summary_large_image","twitter_creator":"@ROSolutionsmx","twitter_site":"@ROSolutionsmx","twitter_misc":{"Escrito por":"Jose Luis Vega","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#article","isPartOf":{"@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/"},"author":{"name":"Jose Luis Vega","@id":"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/person\/70c6c9519e7ee22a4f8259c1bdc4af21"},"headline":"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan?","datePublished":"2019-10-10T01:52:32+00:00","mainEntityOfPage":{"@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/"},"wordCount":642,"commentCount":0,"publisher":{"@id":"https:\/\/rosolutions.com.mx\/blog\/#organization"},"image":{"@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage"},"thumbnailUrl":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png","articleSection":["Desarrollo","Programaci\u00f3n","Software"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/","url":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/","name":"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan? &#8212; Desarrollo de software","isPartOf":{"@id":"https:\/\/rosolutions.com.mx\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage"},"image":{"@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage"},"thumbnailUrl":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png","datePublished":"2019-10-10T01:52:32+00:00","description":"Expertos en Desarrollo de Software, Aplicaci\u00f3nes M\u00f3viles, Sistemas Web, SEO, Marketing y Dise\u00f1o Web.","breadcrumb":{"@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#primaryimage","url":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png","contentUrl":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2019\/10\/testing.png","width":1000,"height":600,"caption":"Automated testing"},{"@type":"BreadcrumbList","@id":"https:\/\/rosolutions.com.mx\/blog\/pruebas-automatizadas-en-javascript-que-son-como-funcionan\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/rosolutions.com.mx\/blog\/"},{"@type":"ListItem","position":2,"name":"Pruebas automatizadas en Javascript, \u00bfQu\u00e9 son? \u00bfC\u00f3mo funcionan?"}]},{"@type":"WebSite","@id":"https:\/\/rosolutions.com.mx\/blog\/#website","url":"https:\/\/rosolutions.com.mx\/blog\/","name":"Desarrollo de software","description":"Blog de RO Solutions","publisher":{"@id":"https:\/\/rosolutions.com.mx\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rosolutions.com.mx\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/rosolutions.com.mx\/blog\/#organization","name":"RO Solutions","url":"https:\/\/rosolutions.com.mx\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2018\/03\/icono-01-2.png","contentUrl":"https:\/\/rosolutions.com.mx\/blog\/wp-content\/uploads\/2018\/03\/icono-01-2.png","width":350,"height":346,"caption":"RO Solutions"},"image":{"@id":"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/rosolutionsmx\/","https:\/\/x.com\/ROSolutionsmx"]},{"@type":"Person","@id":"https:\/\/rosolutions.com.mx\/blog\/#\/schema\/person\/70c6c9519e7ee22a4f8259c1bdc4af21","name":"Jose Luis Vega","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/6ca4660b012176223ef0f1a48ba9dbce267a49c3ce6e42003fcb7b144b5fe313?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6ca4660b012176223ef0f1a48ba9dbce267a49c3ce6e42003fcb7b144b5fe313?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6ca4660b012176223ef0f1a48ba9dbce267a49c3ce6e42003fcb7b144b5fe313?s=96&d=mm&r=g","caption":"Jose Luis Vega"},"sameAs":["http:\/\/rosolutions.com.mx"],"url":"https:\/\/rosolutions.com.mx\/blog\/author\/wafo\/"}]}},"_links":{"self":[{"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/posts\/806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=806"}],"version-history":[{"count":5,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/posts\/806\/revisions"}],"predecessor-version":[{"id":814,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/posts\/806\/revisions\/814"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/media\/812"}],"wp:attachment":[{"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rosolutions.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}