es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al cargar la biblioteca got para realizar pruebas – ‘SyntaxError: No se puede utilizar la declaración de importación fuera de un módulo’

Tengo un problema bastante simple, pero no puedo hacer que funcione por más que lo intente, he pasado horas buscando en línea.

Estoy usando la biblioteca “got” para trabajar con una API del clima, aquí está el código:

import got from 'got';
import dotenv from 'dotenv';
dotenv.config();

class WeatherApi {

  #getApiKey = () => process.env.WEATHER_API;

  fetchWeatherData = (city, callback) => {
    const apiKey = this.#getApiKey();
    const apiUrl = `http://api.openweathermap.org/data/2.5/weather?units=metric&q=${city}&appid=${apiKey}`;

    got(apiUrl).then((response) => {
      const weatherData = JSON.parse(response.body);
      callback(weatherData)
      });
  }
}

export { WeatherApi } 

El código funciona perfectamente cuando lo ejecuto con node, sin embargo, cuando intento ejecutar pruebas usando Jest, obtengo lo siguiente:

  C:\Users\alfon\OneDrive\Documents\Coding\JavaScript\thermostat\node_modules\got\dist\source\index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import create from './create.js';
                                                                                      ^^^^^^

    SyntaxError: Cannot use import statement outside a module

    > 1 | import got from 'got';
        | ^
      2 | import dotenv from 'dotenv';
      3 | dotenv.config();
      4 |

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1728:14)
      at Object.<anonymous> (weather_api.js:1:1)

Mi problema es que parece que solo la biblioteca “got” tiene problemas para ser importada, si la elimino y ejecuto Jest, la biblioteca “dotenv” se carga normalmente. No tengo idea de qué me estoy perdiendo aquí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en que Jest no puede manejar las declaraciones de importación para la librería “got”. Una posible solución es usar babel-jest para transformar el código antes de ejecutar las pruebas.

    Para hacer esto, primero instala babel-jest:

    npm install --save-dev babel-jest
    

    Luego, crea un archivo jest.config.js en la raíz de tu proyecto y agrega la siguiente configuración:

    module.exports = {
      transform: {
        '^.+\\.js$': 'babel-jest',
      },
    };
    

    Esto le indica a Jest que use babel-jest para transformar cualquier archivo .js antes de ejecutar las pruebas.

    Finalmente, agrega un archivo .babelrc a la raíz de tu proyecto con la siguiente configuración:

    {
      "presets": [
        "@babel/preset-env"
      ]
    }
    

    Esto le indica a babel que use el preset @babel/preset-env, que incluye soporte para características modernas de JavaScript como las declaraciones de importación.

    Con estas configuraciones en su lugar, Jest debería poder manejar la declaración de importación para la librería “got”.

Comments are closed.