ReferenceError:描述未定义NodeJs


160

我正在尝试定义一些端点并使用进行测试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:描述未定义
    在对象。(/test/test.js:9:1)
    在Module._compile(module.js:456:26)
    在Object.Module._extensions..js(module.js:474:10)
    在Module.load(module.js:356:32)
    在Function.Module._load(module.js:312:12)
    在Function.Module.runMain(module.js:497:10)
    在启动时(node.js:119:16)
    在node.js:906:3

我该如何解决该问题?


1
您期望describe()成为什么,在哪里定义?在查看您的test.js文件时,没有describe定义任何符号。
jfriend00

1
describe()是茉莉花的一部分。
基思·泰勒

1
导致此问题的文档差距已在201611月修复,但可能只是在最近发布的4.1.0版本中才出现在网站上。
devius

Answers:


197

假设您通过进行测试mocha,则必须使用mocha命令而不是node可执行文件运行测试。

因此,如果您还没有这样做,请确保您已这样做npm install mocha -g。然后,只需mocha在项目的根目录中运行即可。


16
如果要使Mocha功能可用于节点怎么办?
abhisekp

12
mochajs.org上的mocha文档根本没有提及此……
Richard Ev

3
无需全局安装mocha,只需"test": "./node_modules/.bin/mocha -V"在package.json的脚本部分中使用,并将mocha作为另一个依赖项进行安装
Lukas Liesis

2
@LukasLiesis不需要./node_modules/.bin,使用npm run或时此路径已经加载yarn,因此只需“测试”即可:“ mocha -V”就足够了
Felipe Sabino

@FelipeSabino感谢您指出这一点,但是当您刚刚 mocha -V不清楚它是从全局还是本地加载时,这就是为什么即使系统不需要它,我仍然更愿意显示路径
Lukas Liesis

132

如果您使用的是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"
},

哇!解决问题后就看到了这一点。
nonybrighto

谢谢!节省了我很多时间!
布拉德·W

WebStorm也是如此(这很奇怪)
yentsun

4
感谢您的回答,使一切正常!!但是这如何工作?如何将tdd更改为bdd来解决问题?
TedTran2019 '19

6
bdd vs tdd是通过命令参数传递给mocha的“测试样式”,bdd是默认值,但是vscode生成的模板使用tdd。您可能正在使用bdd,因为大多数入门指南都使用bdd。当bdd为默认值时,为什么vscode使用tdd作为默认值超出了我的范围。
Ryan The Leach

47

要在不全局安装Mocha的情况下使用node / npm运行测试,可以执行以下操作:

•将Mocha本地安装到您的项目(npm install mocha --save-dev

•(可选)安装一个断言库(npm install chai --save-dev

•在中package.json,为scripts摩卡二进制文件添加一个部分并定位

"scripts": {
  "test": "node ./node_modules/mocha/bin/mocha"
}

•将规格文件放在/test根目录中命名的目录中

•在您的规范文件中,导入断言库

var expect = require('chai').expect;

•您并不需要进口摩卡,运行mocha.setup,或致电mocha.run()

•然后从项目根目录运行脚本:

npm test

7
在您的测试行中,您不再需要指向mocha bin文件夹,只需将mocha它放上去即可。
阿德里安·林奇

1
如果您希望此命令在“ / test”目录中运行所有测试,包括子目录,请输入mocha --recursive
Luke Gallione

1
@AdrianLynch:已经两年了,但是有些不同或改变。没什么大不了的,但也许会对别人有所帮助。我在全球安装Mocha 4.01的Windows 10上。我必须指向mocha \ bin \ mocha,就像cantera的笔记说的那样。
BaldEagle

为了让我工作,我必须包括这样的目标文件夹:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler,

21

您也可以这样:

  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)
    })
  })

参考:http : //mochajs.org/#require


从ref> require接口不能通过节点可执行文件运行,而必须通过mocha运行。问题是询问通过节点运行。

1
我稍后再写,并且有不同的经验。万一它对某人有帮助...我在Windows 10上全局安装了mocha 4.01和chai 4.1.2。我不需要这里的前三个变量;我需要第四。@eighteyes:我还没有找到如何直接运行Mocha的方法。我正在通过“节点<到mocha \ bin \ mocha的完整路径> <测试文件的相对路径>”运行。
BaldEagle

1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.it这实际上是多余的。您可以var {describe, it} = require('mocha')使用ES6 解构赋值
user5532169

6

使用“ --ui tdd”时出现此错误。删除此问题或使用“ --ui bdd”修复问题。


5

OP询问node是否要从中运行mocha。这是一个非常常见的用例,请参阅以编程方式使用Mocha

这就是注入的描述并将其纳入我的测试中。

mocha.ui('bdd').run(function (failures) {
    process.on('exit', function () {
      process.exit(failures);
    });
  });

我试过tdd像在文档中一样,但是没有用,但是bdd可以用。


非常感谢你!虽然我知道describe仅BDD可用,而'TDD'则不可用,但是在安装脚本中,我还是使用TDD并一直认为自己配置为'BDD'。互联网搜索没有帮助,因为我的看法是,我做了正确的设置(BDD),但仍然出现错误。这只是您的解决方案(这是Internet搜索结果中找到的任何其他解决方案所独有的解决方案),使我添加了其他代码,以覆盖我的错误设置并最终起作用。仅在其他配置设置过程中,我看到了我的错别字并将其更正为“ BDD”,不需要上面的代码。
VanagaS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.