web-dev-qa-db-fra.com

Jest: Impossible d'utiliser l'instruction d'importation en dehors d'un module

J'ai eu une erreur lorsque j'exécute un test avec Jest, j'ai essayé de corriger cette erreur pendant 2 heures. Mais je ne pouvais pas le réparer. Mon module utilise gapi-script package et une erreur s'est produite dans ce package. Cependant, je ne sais pas pourquoi cela s'est produit et comment y remédier.

jest.config.js

module.exports = {
  "collectCoverage": true,
  "rootDir": "./",
  "testRegex": "__tests__/.+\\.test\\.js",
  "transform": {
    '^.+\\.js?$': "babel-jest"
  },
  "moduleFileExtensions": ["js"],
  "moduleDirectories": [
    "node_modules",
    "lib"
  ]
}

babel.config.js

module.exports = {
  presets: [
    '@babel/preset-env',
  ]
};

méthodes.test.js

import methods, { typeToActions } from '../lib/methods';

méthodes.js

import { gapi } from "gapi-script";
...

Message d'erreur

C:\haram\github\react-youtube-data-api\node_modules\gapi-script\index.js: 1 ({"Object.": Function (module, exports, require, __ dirname, __ filename, global, jest) { import {gapi, gapiComplete} depuis './gapiScript';

SyntaxError: Cannot use import statement outside a module

Quel est le problème avec mon réglage?

6
Haram Bae

Jest a besoin de babel pour travailler avec des modules. Pour le test seul, vous n'avez pas besoin de jest.config.js, nommez simplement les fichiers de test xxx.spec.js ou xxx.test.js ou mettez les fichiers dans un dossier nommé test.

J'utilise ceci babel.config.js:

module.exports = function (api) {
  api.cache(true)

  const presets = [
    "@babel/preset-env"
  ]

  return {
    presets
  }
}

L'ajout de "type": "module" dans package.json ou l'utilisation de mjs comme indiqué dans d'autres réponses n'est pas nécessaire lorsque votre configuration n'est pas trop compliquée.

1
Onno van der Zee