Mocha + TypeScript :impossible d'utiliser l'instruction d'importation en dehors d'un module

Je regardais cette vidéo afin d'apprendre à ajouter des tests simples à mes itinéraires Express, mais je reçois toutes sortes d'erreurs lors de l'exécution d'un test. L'erreur est :

importer * comme chai depuis ‘chai’ ;

^^^^^^

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

J'ai lu des questions similaires sur Stack Overflow et des problèmes GitHub, mais je n'ai pas trouvé de solution pour ma propre application. Enfin, j'ai trouvé la documentation Mocha sur GitHub concernant les modules ES mais cela n'a pas fonctionné :

J'ai créé l'application en utilisant le module TypeScript et CommonJS pour transpiler, j'ai donc ajouté "test": "env TS_NODE_COMPILER_OPTIONS='{"module": "commonjs" }' mocha src/test/*.ts" au package.json scripts mais j'obtiens la même erreur à chaque fois. J'utilise ts-node en tant que serveur.

Quoi qu'il en soit, c'est mon tsconfig.json fichier :

{
    "compilerOptions": {
        "sourceMap": true,
        "target": "es6",
        "module": "commonjs",
        "outDir": "./dist",
        "rootDir": "./src"
    },
    "exclude": [
        "node_modules"
    ]
}

Et voici le src/test/mi-route.ts fichier :

import * as chai from 'chai';
import * as chaiHttp from 'chai-http';
import server from '../app';

// Assertions
chai.should();

chai.use(chaiHttp);

describe('API Users', () => {
    // Test Route GET
    describe('GET /api/admin/users', () => {
        it('Should return all the users', done => {
            chai.request(server)
                .get('/api/admin/users')
                .end((err, response) => {
                    response.should.have.status(200);
                    response.body.should.be.a('object');
                    done();
                });
        });
    });
});

Et c'est mon package.json script :

"scripts": {
    "dev": "ts-node-dev src/app.ts",
    "start": "node dist/app.js",
    "test": "env TS_NODE_COMPILER_OPTIONS='{"module": "commonjs" }' mocha src/test/*.ts",
    "build": "tsc -p"
  },

Alors… des suggestions ? Dois-je changer le module JS commun ? Merci d'avance

Répondre

J'ai pu tester grâce à la réponse du problème @types/chai-http - Can't use ES6 import GitHub.

J'ai ajouté un deuxième fichier de configuration TypeScript tsconfig.testing.json avec les informations suivantes :

{
    "compilerOptions": {
      "module": "commonjs",
      "target": "es2015",
      "lib": ["es2017"],
      "declaration": false,
      "noImplicitAny": false,
      "removeComments": true,
      "inlineSourceMap": true,
      "moduleResolution": "node"
    },
    "include": ["scripts/**/*.ts", "src/**/*.ts", "node_modules/lodash-es/**/*.js"]
  }

Puis j'ai changé mon package.json scripts comme :

"test": "env TS_NODE_PROJECT="tsconfig.testing.json" mocha --require ts-node/register 'src/test/**/*.ts'",

Enfin, j'ai changé le fichier de test comme :

import * as chai from 'chai';
import 'chai-http';
import server from '../app';

// Assertions
chai.should();

chai.use(require('chai-http'));

Eh bien, l'exécution des tests fonctionne maintenant.