ReferenceError: describe n'est pas défini NodeJs

160

J'essaie de définir certains points de terminaison et de faire un test en utilisant nodejs. Dans server.jsj'ai:

var express = require('express');
var func1 = require('./func1.js');
var port = 8080;
var server = express();

server.configure(function(){
  server.use(express.bodyParser());
});

server.post('/testend/', func1.testend);

et en func1.js:

    var testend = function(req, res) {
           serialPort.write("1", function(err, results) {
           serialPort.write("2" + "\n", function(err, results) {
           });
      });
   });
    exports.testend = testend;

Maintenant test.js, j'essaie d'utiliser ce point de terminaison:

var should = require('should');
var assert = require('assert');
var request = require('supertest');
var http = require('http');
var app = require('./../server.js');
var port = 8080;

describe('Account', function() {
        var url = "http://localhost:" + port.toString();
        it('test starts', function(done) {
                request(url).post('/testend/')
                // end handles the response
                .end(function(err, res) {
                        if (err) {
                                throw err;
                        }
                        res.body.error.should.type('string');
                        done();
                });
        });
});

Mais quand je cours node test.js, j'obtiens cette erreur:

describe ('Compte', function () {
^

ReferenceError: la description n'est pas définie
    à Object. (/test/test.js:9:1)
    à Module._compile (module.js: 456: 26)
    à Object.Module._extensions..js (module.js: 474: 10)
    à Module.load (module.js: 356: 32)
    à Function.Module._load (module.js: 312: 12)
    à Function.Module.runMain (module.js: 497: 10)
    au démarrage (node.js: 119: 16)
    à node.js: 906: 3

Comment puis-je résoudre le problème?

N34
la source
1
Qu'espérez-vous describe()être et où est-il défini? En regardant votre fichier test.js, il n'y a aucun symbole describequi y est défini.
jfriend00
1
describe () fait partie de Jasmine.
Keith Tyler
1
Le manque de documentation qui a conduit à cette question a été corrigé en novembre 2016 , mais n'est probablement arrivé sur le site Web que récemment avec la sortie de la version 4.1.0.
devius

Réponses:

197

En supposant que vous testez via mocha, vous devez exécuter vos tests en utilisant la mochacommande au lieu de l' nodeexécutable.

Donc, si vous ne l'avez pas déjà fait, assurez-vous de le faire npm install mocha -g. Ensuite, exécutez simplement mochadans le répertoire racine de votre projet.

mscdex
la source
16
Et si je veux rendre les fonctions mocha disponibles pour node?
abhisekp
12
Les documents de moka sur mochajs.org omettent singulièrement de mentionner cela ...
Richard Ev
3
pas besoin d'une installation globale de mocha, il suffit de l'utiliser "test": "./node_modules/.bin/mocha -V"dans la section scripts de package.json et d'installer mocha comme une dépendance supplémentaire
Lukas Liesis
2
@LukasLiesest inutile ./node_modules/.bin, ce chemin est déjà chargé lorsque vous utilisez npm runou yarn, donc juste "test": "mocha -V" suffira
Felipe Sabino
@FelipeSabino merci d'avoir indiqué cela, mais quand vous l'avez juste, mocha -Vil n'est pas clair s'il a été chargé à partir de global ou local, c'est pourquoi je préfère toujours afficher le chemin même s'il n'est pas requis par le système
Lukas Liesis
133

si vous utilisez vscode, souhaitez déboguer vos fichiers

J'utilisais tddavant, ça jetteReferenceError: describe is not defined

Mais, quand je l'utilise bdd, ça marche!

perdre une demi-journée pour le résoudre ...

    {
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
      "args": [
        "-u",
        "bdd",// set to bdd, not tdd
        "--timeout",
        "999999",
        "--colors",
        "${workspaceFolder}/test/**/*.js"
      ],
      "internalConsoleOptions": "openOnSessionStart"
},
caramel au beurre
la source
Hou la la! voir cela après avoir juste résolu le problème.
nonybrighto
Je vous remercie! M'a fait gagner beaucoup de temps!
Brad W
Cela est également vrai pour WebStorm (ce qui est étrange)
yentsun
4
Merci pour la réponse, tout a fonctionné !! Mais comment ça marche? Comment le changement de tdd en bdd résout-il le problème?
TedTran2019
6
bdd vs tdd est le 'style de test' passé à mocha via des arguments de commande, bdd est la valeur par défaut, mais le modèle généré par vscode utilise tdd. Vous utilisez probablement bdd, car la plupart des guides de démarrage utilisent bdd. Pourquoi vscode utilise tdd par défaut, lorsque bdd est la valeur par défaut, cela me dépasse.
Ryan The Leach le
47

Pour exécuter des tests avec node / npm sans installer Mocha globalement, vous pouvez le faire:

• Installez Mocha localement dans votre projet ( npm install mocha --save-dev)

• Installez éventuellement une bibliothèque d'assertions ( npm install chai --save-dev)

• Dans votre package.json, ajoutez une section scriptset ciblez le binaire moka

"scripts": {
  "test": "node ./node_modules/mocha/bin/mocha"
}

• Placez vos fichiers de spécifications dans un répertoire nommé /testdans votre répertoire racine

• Dans vos fichiers de spécifications, importez la bibliothèque d'assertions

var expect = require('chai').expect;

• Vous n'avez pas besoin d'importer du moka, d'exécuter mocha.setupou d'appelermocha.run()

• Exécutez ensuite le script depuis la racine de votre projet:

npm test
cantera
la source
7
Dans votre ligne de test, vous n'avez plus besoin de pointer vers le dossier bin mocha, mettez simplement mocha, cela fonctionnera.
Adrian Lynch
1
Si vous souhaitez que cette commande exécute tous les tests dans le répertoire '/ test', y compris les sous-répertoires, alors mettezmocha --recursive
Luke Gallione
1
@AdrianLynch: Cela fait deux ans, mais quelque chose est différent ou changé. Pas de biggee, mais peut-être que ça aidera quelqu'un. Je suis sous Windows 10 avec Mocha 4.01 installé dans le monde. Je dois pointer vers mocha \ bin \ mocha, comme le dit la note de Cantera.
BaldEagle
Pour que je travaille, je devais inclure le dossier cible comme ceci:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler
22

Vous pouvez également faire comme ceci:

  var mocha = require('mocha')
  var describe = mocha.describe
  var it = mocha.it
  var assert = require('chai').assert

  describe('#indexOf()', function() {
    it('should return -1 when not present', function() {
      assert.equal([1,2,3].indexOf(4), -1)
    })
  })

Référence: http://mochajs.org/#require

subhojit777
la source
Depuis la référence> L'interface require ne peut pas être exécutée via l'exécutable du nœud, et doit être exécutée via mocha. La question se pose sur l'exécution via un nœud.
eighteyes
1
J'écris plus tard et j'ai une expérience différente. Au cas où cela aiderait quelqu'un ... Je suis sous Windows 10 avec mocha 4.01 et chai 4.1.2 installés globalement. Je n'ai pas besoin des trois premières variables ici; J'ai besoin du quatrième. @eighteyes: Je n'ai pas trouvé comment exécuter directement Mocha. Je cours via "node <chemin complet vers mocha \ bin \ mocha> <chemin relatif vers le fichier de test>".
BaldEagle
1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itc'est en fait redondant. Vous pouvez var {describe, it} = require('mocha')avec l' affectation de déstructuration
user5532169
6

j'ai cette erreur lors de l'utilisation de "--ui tdd". supprimez-le ou utilisez le correctif "--ui bdd".

GraySe7en
la source
5

OP a demandé comment fuir de nodepas de mocha. Il s'agit d'un cas d'utilisation très courant, voir Utilisation de Mocha par programme

C'est ce qui a été injecté et décrit dans mes tests.

mocha.ui('bdd').run(function (failures) {
    process.on('exit', function () {
      process.exit(failures);
    });
  });

J'ai essayé tddcomme dans la documentation, mais cela n'a pas fonctionné, mais bdd a fonctionné.

dix-huit
la source
Merci beaucoup! Bien que je sache que ce describen'est disponible qu'avec BDD et non disponible pour 'TDD', d'une manière ou d'une autre dans le script de configuration, j'ai utilisé TDD et j'ai continué à penser que j'avais configuré comme 'BDD'. La recherche sur Internet ne sert à rien, car ma perception était que j'ai fait une configuration correcte (BDD), mais j'obtiens toujours une erreur. C'est seulement votre solution (qui est unique par rapport à toutes les autres solutions trouvées sur les résultats de recherche sur Internet) m'a fait ajouter du code supplémentaire qui a remplacé mon mauvais paramètre et a finalement fonctionné. Ce n'est que lors d'une autre configuration de configuration, j'ai vu ma faute de frappe et après l'avoir corrigée en 'BDD', le code ci-dessus n'était pas nécessaire.
VanagaS