我正在尝试定义一些端点并使用nodejs
进行测试。在server.js
我有:
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);
和func1.js
:
var testend = function(req, res) {
serialPort.write("1", function(err, results) {
serialPort.write("2" + "\n", function(err, results) {
});
});
});
exports.testend = testend;
现在在test.js
我正在尝试使用此端点:
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();
});
});
});
但是当我运行node test.js
时,我收到此错误:
describe('Account', function() { ^ ReferenceError: describe is not defined at Object. (/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) at startup (node.js:119:16) at node.js:906:3
如何解决问题?
答案 0 :(得分:159)
假设您正在通过mocha
进行测试,则必须使用mocha
命令而不是node
可执行文件来运行测试。
因此,如果您还没有,请确保npm install mocha -g
。然后在项目的根目录中运行mocha
。
答案 1 :(得分:41)
要使用node / npm运行测试而不全局安装Mocha,您可以执行以下操作:
•在本地安装Mocha(npm install mocha --save-dev
)
•可选择安装断言库(npm install chai --save-dev
)
•在package.json
中,为scripts
添加一个部分并定位mocha二进制文件
"scripts": {
"test": "node ./node_modules/mocha/bin/mocha"
}
•将规范文件放在根目录中名为/test
的目录中
•在spec文件中,导入断言库
var expect = require('chai').expect;
•您不需要导入摩卡,运行mocha.setup
或致电mocha.run()
•然后从项目根目录运行脚本:
npm test
答案 2 :(得分:15)
你也可以这样做:
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)
})
})
答案 3 :(得分:14)
如果您使用的是vscode,则要调试文件
我以前使用过tdd
,它抛出了ReferenceError: describe is not defined
但是,当我使用bdd
时,它可以工作!
浪费半天时间解决它。...
{
"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"
},
答案 4 :(得分:4)
使用“ --ui tdd”时出现此错误。 删除此错误或使用“ --ui bdd”修复问题。
答案 5 :(得分:2)
OP询问是从node
而非mocha
开始的。这是一个非常常见的用例,请参阅Using Mocha Programatically
这是注入描述并将其纳入我的测试中。
mocha.ui('bdd').run(function (failures) {
process.on('exit', function () {
process.exit(failures);
});
});
我在文档中尝试了tdd
,但这并没有奏效,bdd虽然有效。
答案 6 :(得分:0)
使用任何Javascript测试框架来运行它
npm install jest -g
jest ./**/**/demo.spec.js
npm install mocha -g
mocha ./**/**/demo.spec.js
npm install jasmine-node -g
jasmine-node ./**/**/demo.spec.js
答案 7 :(得分:0)
test
的文件夹,其中包含您的 test.js
文件。mocha -version
(在项目路径中)npm init -y
npm test