Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

410
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda