Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

906
Vistas
Broma: TypeError: replaceAll no es una función

String.prototype.replaceAll() es un método útil y mientras construye y ejecuta todo funciona bien. Sin embargo, todas las pruebas Jest fallan con el siguiente error:

 TypeError: replaceAll is not a function

Estas son mis dependencias:

 "dependencies": { "core-js": "^3.6.5", "vue": "^2.6.11", "vue-class-component": "^7.2.3", "vue-i18n": "^8.22.0", "vue-property-decorator": "^8.4.2", "vue-router": "^3.3.4", "vuex": "^3.5.1" }, "devDependencies": { "@vue/test-utils": "^1.1.0", "jest-junit": "^12.0.0", "ts-jest": "^26.4.1", "typescript": "~3.9.3", "vue-jest": "^3.0.7", "vue-template-compiler": "^2.6.10" },

¿Cómo puedo solucionar este comportamiento?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El problema

Esto sucede porque replaceAll es una función nueva que no está implementada en todos los navegadores ni en las versiones anteriores de Node.js, como se menciona en la otra respuesta. Puede ver qué navegadores lo admiten en Can I Use :

ingrese la descripción de la imagen aquí

Pero, en lugar de usar .replace con RegExp, puede agregar un polyfill para admitir navegadores más antiguos (si es necesario). En mi caso, estoy usando Electron, así que necesito hacerlo solo para Jest.

La cuña se puede encontrar aquí .

La solución

Usar como polyfill para navegadores

  1. Instale como una dependencia con npm i string.prototype.replaceall o yarn add string.prototype.replaceall ;

  2. Agregue el siguiente código en su proyecto. Debe agregarse en un solo lugar.

 import replaceAllInserter from 'string.prototype.replaceall'; replaceAllInserter.shim();

Usar solo en Jest

Actualizar Node.js

Como @leonheess mencionó en los comentarios, puede actualizar Node.js a una versión más reciente. Necesitará una versión que use la versión 8.5 de V8 , que es cuando se implementó .replaceAll .

Según la lista disponible en el sitio web de Node.js , ninguna de las versiones usa V8 8.5, pero a partir de Node.js 15.0.0, se usa la versión 8.6 de V8. Entonces, actualice a Node.js v15 o superior.

Utilizar como polirelleno

Si desea solucionar este problema solo para Jest, puede hacer lo que se menciona en este problema :

  1. Instale como una dependencia de desarrollo con npm i -D string.prototype.replaceall o yarn add -D string.prototype.replaceall ;

  2. Modifique su configuración de Jest, agregue una propiedad setupFilesAfterEnv como se muestra a continuación:

 { "jest": { "setupFilesAfterEnv": ["<rootDir>/jestSetup.js"] } }
  1. Agregue el siguiente código a su archivo jestSetup :
 import replaceAllInserter from 'string.prototype.replaceall'; replaceAllInserter.shim();
over 4 years ago · Santiago Trujillo Denunciar

0

Lo más probable es que esto suceda porque String.prototype.replaceAll no está implementado en Node.js (al menos a partir de la versión v14.15.0 ).

Una alternativa que podría usar son expresiones regulares como en este ejemplo:

 const str = 'foo-foo'; const regex = /foo/g; // Note the 'g' flag, which matches all occurrences of the expression console.log(str.replace(regex, 'bar')); // 'bar-bar'

Puede consultar aquí para obtener más información sobre las expresiones regulares.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda