ReferenceError: description ist kein definierter Knoten

160

Ich versuche, einige Endpunkte zu definieren und einen Test mit durchzuführen nodejs. In habe server.jsich:

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

und in func1.js:

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

Jetzt test.jsversuche ich, diesen Endpunkt zu verwenden:

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

Aber wenn ich renne, node test.jsbekomme ich diesen Fehler:

beschreiben ('Account', function () {
^

ReferenceError: description ist nicht definiert
    bei Objekt. (/test/test.js:9:1)
    at Module._compile (module.js: 456: 26)
    at Object.Module._extensions..js (module.js: 474: 10)
    bei Module.load (module.js: 356: 32)
    at Function.Module._load (module.js: 312: 12)
    bei Function.Module.runMain (module.js: 497: 10)
    beim Start (node.js: 119: 16)
    at node.js: 906: 3

Wie kann ich das Problem beheben?

N34
quelle
1
Was erwarten Sie describe()und wo ist es definiert? Beim Betrachten Ihrer Datei test.js wird dort kein Symbol describedefiniert.
jfriend00
1
description () ist Teil von Jasmine.
Keith Tyler
1
Die Dokumentationslücke, die zu dieser Frage führte, wurde im November 2016 behoben , hat es aber wahrscheinlich erst kürzlich mit der Veröffentlichung von Version 4.1.0 auf die Website geschafft.
Devius

Antworten:

197

Angenommen, Sie testen über mocha, müssen Sie Ihre Tests mit dem mochaBefehl anstelle der nodeausführbaren Datei ausführen.

Wenn Sie es noch nicht getan haben, stellen Sie sicher, dass Sie es tun npm install mocha -g. Führen mochaSie dann einfach das Stammverzeichnis Ihres Projekts aus.

mscdex
quelle
16
Was ist, wenn ich die Mokka-Funktionen dem Knoten zur Verfügung stellen möchte?
Abhisekp
12
Die Mokka-Dokumente auf mochajs.org erwähnen dies nicht ...
Richard Ev
3
Keine Notwendigkeit für eine globale Mokka-Installation, verwenden Sie einfach den "test": "./node_modules/.bin/mocha -V"Skript-Abschnitt von package.json und installieren Sie Mokka als eine weitere Abhängigkeit
Lukas Liesis
2
@LukasLiesis keine Notwendigkeit ./node_modules/.bin, dieser Pfad ist bereits geladen, wenn Sie verwenden, npm runoder yarn, nur "Test": "Mokka -V" wird ausreichen
Felipe Sabino
@FelipeSabino danke für den Hinweis, aber wenn Sie gerade haben, ist mocha -Ves nicht klar, ob es von global oder lokal geladen wurde, deshalb zeige ich immer noch lieber den Pfad, auch wenn es nicht vom System benötigt wird
Lukas Liesis
131

Wenn Sie vscode verwenden, möchten Sie Ihre Dateien debuggen

Ich habe es tddfrüher benutzt, es wirftReferenceError: describe is not defined

Aber wenn ich es benutze bdd, funktioniert es!

Verschwenden Sie einen halben Tag, um es zu lösen ....

    {
      "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"
},
Toffee
quelle
Beeindruckend! Sehen Sie dies, nachdem Sie das Problem gelöst haben.
Nonybrighto
Danke dir! Hat mir viel Zeit gespart!
Brad W
Dies gilt auch für WebStorm (was seltsam ist)
Yentsun
4
Danke für die Antwort, alles hat funktioniert !! Wie funktioniert das aber? Wie kann das Problem durch Ändern von tdd in bdd behoben werden?
TedTran2019
6
bdd vs tdd ist der 'Teststil', der über Befehlsargumente an mocha übergeben wird. bdd ist die Standardeinstellung, aber die von vscode generierte Vorlage verwendet tdd. Sie verwenden wahrscheinlich bdd, da die meisten Anleitungen für den Einstieg bdd verwenden. Warum vscode tdd als Standard verwendet, wenn bdd der Standard ist, ist mir ein Rätsel.
Ryan The Leach
47

Um Tests mit node / npm auszuführen, ohne Mocha global zu installieren, haben Sie folgende Möglichkeiten:

• Installieren Sie Mocha lokal in Ihrem Projekt ( npm install mocha --save-dev)

• Installieren Sie optional eine Assertionsbibliothek ( npm install chai --save-dev)

• Fügen Sie in Ihrem package.jsoneinen Abschnitt für scriptsdie Mokka-Binärdatei hinzu und zielen Sie darauf ab

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

• Legen Sie Ihre Spezifikationsdateien in einem Verzeichnis ab, das /testin Ihrem Stammverzeichnis benannt ist

• Importieren Sie in Ihren Spezifikationsdateien die Assertionsbibliothek

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

• Sie müssen keinen Mokka importieren, ausführen mocha.setupoder aufrufenmocha.run()

• Führen Sie dann das Skript von Ihrem Projektstamm aus:

npm test
Cantera
quelle
7
In Ihrer Testzeile müssen Sie nicht mehr auf den Mokka-Bin-Ordner zeigen. Einfach ausgedrückt mocha, es wird funktionieren.
Adrian Lynch
1
Wenn Sie möchten, dass dieser Befehl alle Tests im Verzeichnis '/ test' einschließlich der Unterverzeichnisse mocha --recursive
Luke Gallione
1
@AdrianLynch: Es ist zwei Jahre her, aber etwas ist anders oder verändert. Kein Biggee, aber vielleicht hilft es jemandem. Ich bin unter Windows 10 mit Mocha 4.01 global installiert. Ich muss auf Mokka \ bin \ Mokka zeigen, wie Canteras Notiz sagt.
BaldEagle
Damit ich arbeiten konnte, musste ich den Zielordner wie {"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
folgt
21

Sie können auch Folgendes tun:

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

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

subhojit777
quelle
Von der Referenz> Die erforderliche Schnittstelle kann nicht über die ausführbare Datei des Knotens ausgeführt werden und muss über Mokka ausgeführt werden. Die Frage ist, wie man über einen Knoten läuft.
Achtzehn Jahre
1
Ich schreibe später und habe andere Erfahrungen. Für den Fall, dass es jemandem hilft ... Ich bin unter Windows 10 mit Mokka 4.01 und Chai 4.1.2 weltweit installiert. Ich brauche die ersten drei Variablen hier nicht; Ich brauche den vierten. @eighteyes: Ich habe nicht gefunden, wie man Mocha direkt ausführt. Ich laufe über "Knoten <vollständiger Pfad zu Mokka \ bin \ Mokka> <relativer Pfad zu Testdatei>".
BaldEagle
1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itdas ist eigentlich überflüssig. Sie können var {describe, it} = require('mocha')mit ES6 Destrukturierungszuweisung
Benutzer5532169
6

Ich habe diesen Fehler bei der Verwendung von "--ui tdd". Entfernen Sie dieses Problem oder beheben Sie das Problem mit "--ui bdd".

GraySe7en
quelle
5

OP fragte nach Laufen von nodenicht von mocha. Dies ist ein sehr häufiger Anwendungsfall, siehe Programmgesteuertes Verwenden von Mokka

Dies ist, was injiziert beschreiben und es in meine Tests.

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

Ich habe es tddwie in den Dokumenten versucht , aber das hat nicht funktioniert, aber bdd hat funktioniert.

achtzehn Jahre
quelle
Vielen Dank! Obwohl mir bewusst ist, dass dies describenur mit BDD und nicht mit 'TDD' verfügbar ist, habe ich im Setup-Skript TDD verwendet und immer wieder gedacht, dass ich als 'BDD' konfiguriert habe. Die Internetsuche hilft nicht weiter, da ich der Meinung war, dass ich das Setup (BDD) korrigiert habe, aber trotzdem eine Fehlermeldung erhalte. Nur Ihre Lösung (die sich von allen anderen in den Internet-Suchergebnissen gefundenen Lösungen unterscheidet) hat mich dazu gebracht, zusätzlichen Code hinzuzufügen, der meine falsche Einstellung überschrieb und schließlich funktionierte. Es ist nur während anderer Konfigurations-Setups, ich habe meinen Tippfehler gesehen und nachdem ich ihn auf 'BDD' korrigiert hatte, war der obige Code nicht erforderlich.
VanagaS