ReferenceError:描述未定义NodeJs
Posted
技术标签:
【中文标题】ReferenceError:描述未定义NodeJs【英文标题】:ReferenceError: describe is not defined NodeJs 【发布时间】:2015-04-08 15:25:49 【问题描述】:我正在尝试定义一些端点并使用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()
是什么?它在哪里定义?在查看您的 test.js 文件时,那里没有定义符号 describe
。
describe() 是 Jasmine 的一部分。
导致此问题的文档空白已在 November 2016 中修复,但可能只是在最近发布的 4.1.0 版中才出现在该网站上。
【参考方案1】:
假设您通过mocha
进行测试,您必须使用mocha
命令而不是node
可执行文件来运行测试。
因此,如果您还没有,请确保您使用npm install mocha -g
。然后在项目的根目录中运行mocha
。
【讨论】:
如果我想让 mocha 函数对 node 可用怎么办? mochajs.org 的 mocha 文档没有提到这一点... 不需要全局 mocha 安装,只需在 package.json 的脚本部分使用"test": "./node_modules/.bin/mocha -V"
并安装 mocha 作为另一个依赖项
@LukasLiesis 不需要./node_modules/.bin
,当您使用npm run
或yarn
时,此路径已加载,因此只需 "test": "mocha -V" 就足够了
@FelipeSabino 感谢您指出这一点,但是当您只有 mocha -V
时,不清楚它是从全局还是本地加载的,这就是为什么即使系统不需要它,我仍然更喜欢显示路径【参考方案2】:
如果你使用 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"
,
【讨论】:
哇!刚刚解决问题后看到这个。 谢谢!节省了我很多时间! WebStorm 也是如此(这很奇怪) 感谢您的回答,一切正常!!这是如何工作的?将 tdd 更改为 bdd 如何解决问题? bdd vs tdd 是通过命令参数传递给 mocha 的“测试风格”,bdd 是默认值,但是 vscode 生成的模板使用 tdd。您可能正在使用 bdd,因为大多数入门指南都使用 bdd。为什么vscode默认使用tdd,当bdd是默认时,我想不通。【参考方案3】:要在不全局安装 Mocha 的情况下使用 node/npm 运行测试,您可以这样做:
• 将 Mocha 本地安装到您的项目 (npm install mocha --save-dev
)
• 可选择安装断言库 (npm install chai --save-dev
)
• 在您的 package.json
中,为 scripts
添加一个部分并定位 mocha 二进制文件
"scripts":
"test": "node ./node_modules/mocha/bin/mocha"
• 将您的规范文件放在根目录中名为/test
的目录中
• 在您的规范文件中,导入断言库
var expect = require('chai').expect;
• 您不需要导入 mocha、运行 mocha.setup
或致电 mocha.run()
• 然后从项目根目录运行脚本:
npm test
【讨论】:
在您的测试行中,您不再需要指向 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"
【参考方案4】:
你也可以这样做:
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 接口不能通过 node 可执行文件运行,必须通过 mocha 运行。问题是关于通过节点运行。 后来写了,有不同的体验。万一它对某人有帮助......我在 Windows 10 上安装了 mocha 4.01 和 chai 4.1.2 全球安装。我这里不需要前三个变量;我需要第四个。 @eighteyes:我还没有找到如何直接运行 Mocha。我正在通过“节点 ”运行。var mocha = require('mocha') var describe = mocha.describe var it = mocha.it
这实际上是多余的。你可以var describe, it = require('mocha')
与 ES6 destructuring assignment【参考方案5】:
使用“--ui tdd”时出现此错误。 删除这个或使用“--ui bdd”修复问题。
【讨论】:
【参考方案6】:OP 询问是否从 node
而非 mocha
运行。这是一个很常见的用例,见Using Mocha Programatically
这就是将 describe 注入到我的测试中的内容。
mocha.ui('bdd').run(function (failures)
process.on('exit', function ()
process.exit(failures);
);
);
我尝试了tdd
就像在文档中一样,但这没有用,但 bdd 有效。
【讨论】:
非常感谢!虽然我知道describe
仅适用于 BDD 而不适用于“TDD”,但不知何故,在设置脚本中,我使用了 TDD 并一直认为我配置为“BDD”。互联网搜索无济于事,因为我的看法是,我做了正确的设置 (BDD),但仍然出现错误。这只是您的解决方案(这与 Internet 搜索结果中发现的任何其他解决方案都是独一无二的)使我添加了覆盖我错误设置并最终起作用的额外代码。仅在其他配置设置期间,我看到了我的错字并在将其更正为“BDD”后,不需要上面的代码。【参考方案7】:
确保您有一个名为 test
的文件夹,其中包含您的 test.js
文件。
另外,通过在终端中运行 mocha -version
(在项目路径中),确保您的项目中有 mocha 可用
确保你的项目有 package.json 可用,如果没有运行npm init -y
最后运行 mocha 测试脚本,在终端(在项目路径上)运行 npm test
【讨论】:
【参考方案8】:对于 Jest,您必须将 "jest": true
添加到 .eslintrc
"env":
"browser": true,
"es6": true,
"jest": true
,
...
【讨论】:
以上是关于ReferenceError:描述未定义NodeJs的主要内容,如果未能解决你的问题,请参考以下文章