Ich versuche, einige Endpunkte zu definieren und einen Test mit durchzuführen nodejs
. In habe server.js
ich:
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.js
versuche 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.js
bekomme 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?
describe()
und wo ist es definiert? Beim Betrachten Ihrer Datei test.js wird dort kein Symboldescribe
definiert.Antworten:
Angenommen, Sie testen über
mocha
, müssen Sie Ihre Tests mit demmocha
Befehl anstelle dernode
ausführbaren Datei ausführen.Wenn Sie es noch nicht getan haben, stellen Sie sicher, dass Sie es tun
npm install mocha -g
. Führenmocha
Sie dann einfach das Stammverzeichnis Ihres Projekts aus.quelle
"test": "./node_modules/.bin/mocha -V"
Skript-Abschnitt von package.json und installieren Sie Mokka als eine weitere Abhängigkeit./node_modules/.bin
, dieser Pfad ist bereits geladen, wenn Sie verwenden,npm run
oderyarn
, nur "Test": "Mokka -V" wird ausreichenmocha -V
es 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 wirdWenn Sie vscode verwenden, möchten Sie Ihre Dateien debuggen
Ich habe es
tdd
frü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 ....
quelle
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.json
einen Abschnitt fürscripts
die Mokka-Binärdatei hinzu und zielen Sie darauf ab• Legen Sie Ihre Spezifikationsdateien in einem Verzeichnis ab, das
/test
in Ihrem Stammverzeichnis benannt ist• Importieren Sie in Ihren Spezifikationsdateien die Assertionsbibliothek
• Sie müssen keinen Mokka importieren, ausführen
mocha.setup
oder aufrufenmocha.run()
• Führen Sie dann das Skript von Ihrem Projektstamm aus:
quelle
mocha
, es wird funktionieren.mocha --recursive
{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Sie können auch Folgendes tun:
Referenz: http://mochajs.org/#require
quelle
var mocha = require('mocha') var describe = mocha.describe var it = mocha.it
das ist eigentlich überflüssig. Sie könnenvar {describe, it} = require('mocha')
mit ES6 DestrukturierungszuweisungIch habe diesen Fehler bei der Verwendung von "--ui tdd". Entfernen Sie dieses Problem oder beheben Sie das Problem mit "--ui bdd".
quelle
OP fragte nach Laufen von
node
nicht vonmocha
. Dies ist ein sehr häufiger Anwendungsfall, siehe Programmgesteuertes Verwenden von MokkaDies ist, was injiziert beschreiben und es in meine Tests.
Ich habe es
tdd
wie in den Dokumenten versucht , aber das hat nicht funktioniert, aber bdd hat funktioniert.quelle
describe
nur 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.