ReferenceError: descrivi non è definito NodeJs


160

Sto cercando di definire alcuni endpoint e fare un test usando nodejs . In server.jsho:

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);

e dentro func1.js :

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

Ora in test.js sto provando a usare questo endpoint:

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();
                });
        });
});

Ma quando corro node test.jsricevo questo errore:

descrivi ("Account", function () {
^

ReferenceError: descrivi non è definito
    all'oggetto. (/Test/test.js:9:1)
    at Module._compile (module.js: 456: 26)
    at Object.Module._extensions..js (module.js: 474: 10)
    at Module.load (module.js: 356: 32)
    at Function.Module._load (module.js: 312: 12)
    at Function.Module.runMain (module.js: 497: 10)
    all'avvio (node.js: 119: 16)
    su node.js: 906: 3

Come posso risolvere il problema?


1
Cosa ti aspetti describe()di essere e dove viene definito? Guardando il tuo file test.js, non c'è alcun simbolo describeche viene definito lì.
jfriend00

1
descrivi () fa parte di Jasmine.
Keith Tyler,

1
Il divario nella documentazione che ha portato a questa domanda è stato risolto a novembre 2016 , ma probabilmente è arrivato al sito Web di recente con il rilascio della versione 4.1.0.
devius

Risposte:


197

Supponendo che si stia mochaeseguendo il test, è necessario eseguire i test utilizzando il mochacomando anziché l' nodeeseguibile.

Quindi, se non l'hai già fatto, assicurati di farlo npm install mocha -g . Quindi esegui semplicemente mochanella directory principale del tuo progetto.


16
Cosa succede se voglio rendere disponibili le funzioni mocha al nodo?
abhisekp,

12
I dottori di moka a mochajs.org singolarmente non menzionano questo ...
Richard Ev

3
non c'è bisogno di installare mocha globale, basta usare "test": "./node_modules/.bin/mocha -V"nella sezione script di package.json e installare mocha come un'altra dipendenza
Lukas Liesis

2
@LukasLies non è necessario ./node_modules/.bin, questo percorso è già caricato quando lo usi npm runo yarn, quindi basta "testare": "moka -V" sarà sufficiente
Felipe Sabino

@FelipeSabino grazie per averlo indicato, ma quando hai appena mocha -Vnon è chiaro se è stato caricato da globale o locale, ecco perché preferisco ancora mostrare il percorso anche se non è richiesto dal sistema
Lukas Liesis

133

se stai usando vscode, vuoi eseguire il debug dei tuoi file

L'ho usato tddprima, lanciavaReferenceError: describe is not defined

Ma, quando uso bdd, funziona!

perdere mezza giornata per risolverlo ....

    {
      "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"
},

Wow! vedendolo dopo aver appena risolto il problema.
nonbrighto

Grazie! Mi hai risparmiato un sacco di tempo!
Brad W,

Questo vale anche per WebStorm (che è strano)
yentsun

4
Grazie per la risposta, ha fatto funzionare tutto !! Come funziona però? In che modo la modifica di tdd in bdd risolve il problema?
TedTran2019

6
bdd vs tdd è lo "stile di test" passato a mocha tramite argomenti di comando, bdd è l'impostazione predefinita, ma il modello generato da vscode utilizza tdd. Probabilmente stai usando bdd, poiché la maggior parte delle guide introduttive usa bdd. Perché vscode usa tdd come predefinito, quando bdd è quello predefinito, va oltre me.
Ryan The Leach,

47

Per eseguire i test con node / npm senza installare Mocha a livello globale, è possibile effettuare questa operazione:

• Installa Mocha localmente sul tuo progetto ( npm install mocha --save-dev)

• Opzionalmente installare una libreria di asserzioni ( npm install chai --save-dev)

• Nel tuo package.json, aggiungi una sezione per scriptse indirizza il binario della moka

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

• Inserire i file delle specifiche in una directory denominata /testnella directory principale

• Nei file delle specifiche, importare la libreria di asserzioni

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

Non è necessario importare moka, eseguire mocha.setupo chiamaremocha.run()

• Quindi eseguire lo script dalla radice del progetto:

npm test

7
Nella tua linea di test, non devi più puntare alla cartella mocha bin, basta metterla mocha, funzionerà.
Adrian Lynch,

1
Se desideri che questo comando esegua tutti i test nella directory '/ test', comprese le sottodirectory, inseriscimocha --recursive
Luke Gallione

1
@AdrianLynch: sono passati due anni, ma qualcosa è diverso o cambiato. Nessun problema, ma forse aiuterà qualcuno. Sono su Windows 10 con Mocha 4.01 installato a livello globale. Devo indicare mocha \ bin \ mocha, come dice la nota di cantera.
BaldEagle

Per funzionare, ho dovuto includere la cartella di destinazione in questo modo:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler,

22

Puoi anche fare così:

  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)
    })
  })

Riferimento: http://mochajs.org/#require


Da ref> L'interfaccia richiesta non può essere eseguita tramite l'eseguibile del nodo e deve essere eseguita tramite mocha. La domanda è sull'esecuzione tramite nodo.
ottanta,

1
Sto scrivendo più tardi e ho un'esperienza diversa. Nel caso in cui aiuti qualcuno ... Sono su Windows 10 con mocha 4.01 e chai 4.1.2 installati a livello globale. Non ho bisogno delle prime tre variabili qui; Ho bisogno del quarto. @eighteyes: non ho trovato come eseguire direttamente Mocha. Sto correndo tramite "nodo <percorso completo per mocha \ bin \ mocha> <percorso relativo al file di test>".
BaldEagle,

1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itquesto è in realtà ridondante. È possibile var {describe, it} = require('mocha')con l' assegnazione destrutturante
user5532169

6

ho questo errore quando utilizzo "--ui tdd". rimuovere questo o usando il problema di correzione "--ui bdd".


5

OP ha chiesto di correre da nodenon da mocha. Questo è un caso d'uso molto comune, vedi Uso della Moka a livello di codice

Questo è ciò che viene descritto e iniettato nei miei test.

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

Ho provato tddcome nei documenti, ma non ha funzionato, ma ha funzionato.


Grazie mille! Mentre sono consapevole che describeè disponibile solo con BDD e non disponibile per "TDD", in qualche modo nello script di installazione, ho usato TDD e ho continuato a pensare di aver configurato come "BDD". La ricerca in Internet non è di alcun aiuto, dato che la mia percezione era quella di aver corretto l'installazione (BDD), ma ho ancora errori. È solo la tua soluzione (che è unica rispetto a qualsiasi altra soluzione trovata nei risultati di ricerca su Internet) mi ha fatto aggiungere un codice aggiuntivo che ha superato le mie impostazioni sbagliate e alla fine ha funzionato. È solo durante altre impostazioni di configurazione, ho visto il mio errore di battitura e dopo averlo corretto su "BDD", il codice sopra non era richiesto.
VanagaS,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.