Próbuję zdefiniować niektóre punkty końcowe i wykonać test przy użyciu nodejs
. W server.js
mam:
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);
i w func1.js
:
var testend = function(req, res) {
serialPort.write("1", function(err, results) {
serialPort.write("2" + "\n", function(err, results) {
});
});
});
exports.testend = testend;
Teraz test.js
próbuję użyć tego punktu końcowego:
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();
});
});
});
Ale kiedy uruchamiam, pojawia node test.js
się ten błąd:
opisać ('Konto', funkcja () { ^ ReferenceError: opis nie jest zdefiniowany w Object. (/test/test.js:9:1) w Module._compile (module.js: 456: 26) w Object.Module._extensions..js (module.js: 474: 10) w Module.load (module.js: 356: 32) w Function.Module._load (module.js: 312: 12) w Function.Module.runMain (module.js: 497: 10) podczas uruchamiania (node.js: 119: 16) w node.js: 906: 3
Jak mogę rozwiązać ten problem?
describe()
się być i gdzie to jest zdefiniowane? Patrząc na plik test.js, nie ma tam żadnegodescribe
zdefiniowanego symbolu .Odpowiedzi:
Zakładając, że testujesz przez
mocha
, musisz uruchomić testy za pomocąmocha
polecenia zamiastnode
pliku wykonywalnego.Więc jeśli jeszcze tego nie zrobiłeś, upewnij się, że tak
npm install mocha -g
. Następnie po prostu uruchommocha
w katalogu głównym projektu.źródło
"test": "./node_modules/.bin/mocha -V"
w sekcji skryptów pakietu package.json i zainstaluj mokkę jako jeszcze jedną zależność./node_modules/.bin
, ta ścieżka jest już załadowana, gdy używasz,npm run
lubyarn
po prostu "test": "mocha -V" wystarczymocha -V
, nie jest jasne, czy zostało załadowane z globalnego czy lokalnego, dlatego nadal wolę pokazywać ścieżkę, nawet jeśli nie jest wymagana przez systemjeśli używasz vscode, chcesz debugować swoje pliki
Używałem
tdd
wcześniej, rzucamReferenceError: describe is not defined
Ale kiedy używam
bdd
, to działa!marnować pół dnia, aby go rozwiązać ...
źródło
Aby uruchomić testy z node / npm bez globalnej instalacji Mocha, możesz to zrobić:
• Zainstaluj Mocha lokalnie w swoim projekcie (
npm install mocha --save-dev
)• Opcjonalnie zainstaluj bibliotekę potwierdzeń (
npm install chai --save-dev
)•
package.json
Dodaj sekcję do plikuscripts
binarnego mokka i kieruj na niego• Umieść swoje pliki specyfikacji w katalogu o nazwie
/test
w katalogu głównym• W plikach specyfikacji zaimportuj bibliotekę potwierdzeń
• Użytkownik nie trzeba mokka importu, biegu
mocha.setup
lub zadzwońmocha.run()
• Następnie uruchom skrypt z katalogu głównego projektu:
źródło
mocha
, zadziała.mocha --recursive
{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Możesz też zrobić tak:
Źródła: http://mochajs.org/#require
źródło
var mocha = require('mocha') var describe = mocha.describe var it = mocha.it
to jest w rzeczywistości zbędne. Możeszvar {describe, it} = require('mocha')
z przypisaniem do niszczeniamam ten błąd podczas używania „--ui tdd”. usuń to lub używając "--ui bdd" napraw problem.
źródło
OP zapytał o ucieczkę z
node
nie zmocha
. Jest to bardzo częsty przypadek użycia, zobacz programowe używanie mokkiTak opisuję wtryski i to w moich testach.
Próbowałem
tdd
jak w dokumentach, ale to nie zadziałało, bdd działało chociaż.źródło
describe
jest dostępny tylko z BDD i nie jest dostępny dla 'TDD', w jakiś sposób w skrypcie instalacyjnym użyłem TDD i myślałem, że skonfigurowałem jako 'BDD'. Wyszukiwanie w Internecie nie pomaga, ponieważ moim zdaniem wykonałem poprawną konfigurację (BDD), ale nadal pojawia się błąd. To tylko Twoje rozwiązanie (które jest unikalne wśród innych rozwiązań znalezionych w wynikach wyszukiwania w Internecie) sprawiło, że dodałem dodatkowy kod, który zastąpił moje złe ustawienie i ostatecznie zadziałał. Dopiero podczas innych ustawień konfiguracji widziałem swoją literówkę i po poprawieniu jej na 'BDD' powyższy kod nie był wymagany.