5
votes

La description n'est pas une exception définie sur Typescript, Mocha et VSCode

Pour une raison quelconque, mes scripts de test mocha lancent une exception de "décrire n'est pas défini".

J'ai lu et essayé les solutions suggérées par ces questions SO mais pas de chance:
décrire n'est pas une fonction
"Mocha décrire n'est pas défini en double"

les autres liens sont:
dactylographié mocha décrire n'est pas une fonction

Ceci est mon launch.json VSCode.

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "strict": true,
    "noImplicitAny": false,
    "module": "commonjs",
    "target": "es6",
    "lib": [ "es6" ],
    "sourceMap": true,
    "outDir": "dist",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "strictNullChecks": true,
    "allowJs": false,
    "checkJs": false,
    "types": [
      "node"
    ]
  },
  "compileOnSave": true
}

Ceci est mon script de test mocha:

import "mocha";
import assert = require("assert");

describe("Init", () => {
  before(() => {
    console.log("before-hook");
  });

  it("connected", () => {
    assert(true, "is not true");
  });
});

Et voici mon tsconfig.json:

{
  "type": "node",
  "request": "launch",
  "name": "Mocha Tests",
  "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
  "args": [
    "-u",
    "tdd",
    "--timeout",
    "999999",
    "--colors",
    "${workspaceRoot}/dist/tests/**/*.js"
  ],
  "outFiles": ["${workspaceFolder}/dist/tests/**/*.js"],
  "sourceMaps": true,
  "protocol": "inspector",
  "internalConsoleOptions": "openOnSessionStart"
}

Qu'est-ce que je fais de mal ici? J'ai vraiment besoin de recommencer à utiliser le moka.


1 commentaires

J'ai trouvé le coupable - c'était du moka. Rétrogradé à la version 5.2.0 à partir de 6+ et cela fonctionnait à nouveau. Cependant, ce n'est qu'une solution de contournement et j'ai besoin de savoir quel était vraiment le problème.


4 Réponses :


0
votes

Peut-être que cela peut fonctionner en spécifiant mocha dans les types intérieur de tsconfig.json

npm install @types/mocha --save-dev

N'oubliez pas non plus d'installer @types/mocha

{
  "compilerOptions": {
    ...
    "types": [
      "node",
      "mocha" <--- specify here
    ]
  },
  "compileOnSave": true
}

J'espère que cela peut résoudre votre problème


2 commentaires

Ajout de mocha au tableau des types dans tsconfig.json et packages.json, obtenant toujours: TypeError: mocha_1.describe n'est pas une fonction


S'il vous plaît voir mon commentaire sur le message original.



0
votes

Vos fichiers de test sont-ils écrits en Javascript (vous vous référez à * .js dans votre launch.json)?

J'utilise ts-node pour déboguer les tests unitaires et me référer directement aux fichiers de test Typescript, donc mon entrée launch.json ressemble à ci-dessous. Avant d'utiliser ts-node, j'ai eu l'erreur `` décrire n'est pas définie '' lors de l'exécution à partir de VS Code.

{
  "type": "node",
  "request": "launch",
  "name": "Unit tests (mocha)",
  "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
  "args": [
    "-r",
    "ts-node/register",
    "--timeout",
    "999999",
    "--colors",
    "${workspaceFolder}/test/**/*Test.ts",
  ],
  "console": "integratedTerminal",
  "internalConsoleOptions": "neverOpen",
  "protocol": "inspector"
}


2 commentaires

Les fichiers de test sont écrits dans Typescript.


Dan, s'il vous plaît voir mon commentaire sur la question ci-dessus.



17
votes

Répondre à ma propre question ici.

J'ai résolu le problème après avoir installé Mocha 6.1.1.

Sur le launch.json, modifiez le tableau args de "tdd" à "bdd" afin que:
"-u", "bdd"

La version 5.x fonctionnait avec l'option "tdd", donc la prochaine version majeure a provoqué ce hoquet d'une configuration mal écrite.


4 commentaires

Merci. C'était une solution simple et rapide.


Non, tu l'as juste oublié.


et en fait, dans notre cas, le style était bdd, c'est pourquoi l'option tdd ne fonctionne pas.


merci d'être revenu pour répondre à votre question. Cela m'a fait gagner beaucoup de temps.



0
votes

Suppression de cette importation:

import { describe, it } from 'mocha';

Semble le réparer pour moi.


0 commentaires