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.