Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

910
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!