ChatGPT解决这个技术问题 Extra ChatGPT

ReferenceError:描述未定义NodeJs

我正在尝试定义一些端点并使用 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

我该如何解决这个问题?

您期望 describe() 是什么?它在哪里定义?在查看您的 test.js 文件时,那里没有定义符号 describe
describe() 是 Jasmine 的一部分。
导致此问题的文档空白已在 November 2016 中修复,但可能仅在最近发布版本 4.1.0 时才出现在该网站上。

m
mscdex

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

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


如果我想让 mocha 函数对节点可用怎么办?
mochajs.org 的 mocha 文档完全没有提到这一点...
不需要全局 mocha 安装,只需在 package.json 的脚本部分使用 "test": "./node_modules/.bin/mocha -V" 并将 mocha 作为另一个依赖项安装
@LukasLiesis 不需要 ./node_modules/.bin,当您使用 npm runyarn 时,此路径已加载,因此只需 "test": "mocha -V" 就足够了
@FelipeSabino 感谢您指出这一点,但是当您只有 mocha -V 时,不清楚它是从全局还是本地加载的,这就是为什么我仍然更喜欢显示路径,即使系统不需要它
n
nuclear

如果你使用 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 是默认值时,我无法理解。
c
cantera

要在不全局安装 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" }}
s
subhojit777

你也可以这样做:

  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。我正在通过“节点 <完整路径到 mocha\bin\mocha> <相对路径到测试文件>”运行。
var mocha = require('mocha') var describe = mocha.describe var it = mocha.it 这实际上是多余的。您可以使用 ES6 destructuring assignment var {describe, it} = require('mocha')
G
GraySe7en

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


e
eighteyes

OP 询问从 node 而不是从 mocha 运行。这是一个非常常见的用例,请参阅 Using Mocha Programatically

这就是在我的测试中注入的描述和它。

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

我在文档中尝试了 tdd ,但这没有用,但 bdd 有效。


非常感谢!虽然我知道 describe 仅适用于 BDD 而不适用于“TDD”,但不知何故,在设置脚本中,我使用了 TDD &一直认为我配置为“BDD”。互联网搜索无济于事,因为我的看法是,我做了正确的设置 (BDD),但仍然出现错误。这只是您的解决方案(这与 Internet 搜索结果中发现的任何其他解决方案都是独一无二的)使我添加了覆盖我错误设置并最终起作用的额外代码。只有在其他配置设置期间,我才看到我的错字&将其更正为“BDD”后,不需要上述代码。
D
Dmitry Grinko

对于 Jest,您必须将 "jest": true 添加到 .eslintrc

{
  "env": {
    "browser": true,
    "es6": true,
    "jest": true
  },
...

S
Sidrah Madiha Siddiqui

确保您有一个名为 test 的文件夹,其中包含您的 test.js 文件。

还要通过在终端中运行 mocha -version 确保您的项目中有 mocha 可用(在项目路径中)

确保你的项目有 package.json 可用,如果没有运行 npm init -y

最后运行 mocha 测试脚本,在终端(在项目路径上)运行 npm test


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅