Node.js ReferenceError:未定义描述节点JS
我正在尝试定义一些端点,并使用Node.js ReferenceError:未定义描述节点JS,node.js,rest,testing,Node.js,Rest,Testing,我正在尝试定义一些端点,并使用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/', fu
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
描述('Account',function()){
^
ReferenceError:未定义描述
at对象。(/test/test.js:9:1)
在模块处编译(Module.js:456:26)
在Object.Module.\u extensions..js(Module.js:474:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
位于Function.Module.runMain(Module.js:497:10)
启动时(node.js:119:16)
在node.js:906:3
如何解决此问题?假设您正在通过进行测试,则必须使用
mocha
命令而不是节点
可执行文件来运行测试
因此,如果您还没有安装mocha-g,请确保您已经安装了
npm。然后只需在项目的根目录中运行mocha
。要在不全局安装mocha的情况下使用node/npm运行测试,您可以执行以下操作:
•将Mocha本地安装到您的项目中(npm安装Mocha--save dev
)
•可选地安装断言库(npm install chai--save dev
)
•在您的package.json
中,为脚本添加一个部分,并以摩卡二进制文件为目标
"scripts": {
"test": "node ./node_modules/mocha/bin/mocha"
}
•将规范文件放在根目录中名为/test
的目录中
•在规范文件中,导入断言库
var expect = require('chai').expect;
•您不需要导入摩卡咖啡,运行mocha.setup
,或调用mocha.run()
•然后从项目根目录运行脚本:
npm test
您也可以这样做:
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)
})
})
参考资料:OP询问如何从节点运行,而不是从摩卡运行。这是一个非常常见的用例,请参阅
这就是我在测试中所描述的
mocha.ui('bdd').run(function (failures) {
process.on('exit', function () {
process.exit(failures);
});
});
我在文档中尝试了类似的tdd
,但没有成功,但bdd成功了。如果您使用的是vscode,希望调试您的文件吗
我以前用过tdd
,它抛出ReferenceError:descripe没有定义
但是,当我使用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"
},
使用“-ui tdd”时出现此错误。
删除此项或使用“-ui bdd”修复问题。
- 确保您有一个名为
test
的文件夹,其中包含您的test.js
文件
- 通过在终端(项目路径)中运行
mocha-version
,确保您的项目中有摩卡咖啡
- 确保您的项目有package.json可用,如果没有运行
npm init-y
- 最后要运行mocha测试脚本,在终端上(在项目路径上)运行
npm测试
您希望descripe()
是什么?它是在哪里定义的?在查看test.js文件时,这里没有定义符号descripe
。descripe()是Jasmine的一部分。导致此问题的文档缺口已在中修复,但可能仅在最近版本4.1.0发布后才出现在网站上。如果我想让node可以使用mocha功能,该怎么办?mocha的文档中完全没有提到这一点……不需要全局mocha安装,只需使用“test”:“/node_modules/.bin/mocha-V”
在package.json的scripts部分,并将mocha作为一个安装dependency@LukasLiesis不需要/node\u modules/.bin
,当您使用npm run
或warn
时,此路径已加载,因此只需“测试”:“摩卡-V"意志suffice@FelipeSabino感谢您指出这一点,但是当您刚刚拥有mocha-V
时,不清楚它是从全局还是本地加载的,这就是为什么我仍然喜欢显示路径,即使您的测试行中的系统不需要它,您也不必再指向mocha-bin文件夹,只需将mocha
,它就可以工作了你想让这个命令运行'/test'目录中的所有测试,包括子目录,然后把mocha--recursive
@AdrianLynch:已经两年了,但有些不同或改变了。没什么大不了的,但可能会帮到别人。我在Windows 10上全局安装了mocha 4.01。我必须指向mocha\bin\mocha,就像cantera的一样注意:为了让我工作,我必须像这样包括目标文件夹:{“scripts”:{“test”:“node./node_modules/mocha/bin/mocha--recursive test”}
参考>require接口不能通过节点可执行文件运行,必须通过mocha运行。问题是关于通过节点运行的问题。我稍后会写,并且有不同的经验。如果它对某人有帮助…我在Windows 10上,全局安装了mocha 4.01和chai 4.1.2。我不需要前三个变量;我需要第四个。@是的:我还没有找到如何直接运行摩卡。我正在通过“节点”运行。var Mocha=require('Mocha')var descripe=Mocha.descripe var it=Mocha.it
这实际上是多余的。你可以var{descripe,it}=require('Mocha'))
使用ES6哇!刚解决问题就看到了这一点。谢谢!为我节省了很多时间!WebStorm也是如此(这很奇怪)谢谢你的回答,让一切顺利!!这是怎么工作的?将tdd更改为bdd如何解决问题?bdd vs tdd是通过命令参数传递给mocha的“测试样式”,bdd是默认的,但是vscode生成的模板使用tdd。你可能正在使用bdd,因为大多数入门指南都使用bdd。为什么vscode使用tdd作为当bdd是默认值时,我无法理解默认值。非常感谢!虽然我知道description
仅适用于bdd,而不适用于“TDD”,但不知怎的,在安装脚本中,我使用了TDD&一直认为我配置为“bdd”。互联网搜索没有任何帮助,因为我的感觉是,我