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”。互联网搜索没有任何帮助,因为我的感觉是,我