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я отримую цю помилку:

description ("Рахунок", функція () {
^

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
description () входить до складу Жасмін.
Кіт Тайлер

1
Розрив у документації, що призвів до цього питання, був виправлений у листопаді 2016 року , але, ймовірно, він з’явився на веб-сайті лише нещодавно з випуском версії 4.1.0.
Девіус

Відповіді:


197

Якщо припустити, що ви протестуєте через mocha, вам слід запустити свої тести, використовуючи mochaкоманду замість nodeвиконуваного файлу.

Тож якщо ви ще цього не зробили, переконайтесь, що це зробите npm install mocha -g. Потім просто запустіть mochaу кореневому каталозі вашого проекту.


16
Що робити, якщо я хочу зробити функції мока доступними для вузла?
abhisekp

12
Документи Mocha на mochajs.org поодиноко не згадують про це ...
Річард Ев

3
немає потреби в глобальній установці mocha, просто використовуйте "test": "./node_modules/.bin/mocha -V"в розділі сценаріїв package.json і встановлюйте mocha як ще одну залежність
Лукас Лієсіс

2
Чи не @LukasLiesis немає необхідності ./node_modules/.bin, цей шлях уже завантажений , коли ви використовуєте npm runабо yarn, так просто «тест»: «мокко -V» буде досить
Феліпе SABINO

@FelipeSabino дякую за вказівку на це, але коли у вас просто mocha -Vне зрозуміло, чи було завантажено з глобального чи локального, тому я все одно вважаю за краще показувати шлях, навіть якщо цього не вимагає система
Лукас Лієсіс

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

Дякую! Економив мені багато часу!
Бред Ш

Це також стосується WebStorm (що дивно)
yentsun

4
Дякую за відповідь, змусив все працювати !! Як це працює, хоча? Як зміна tdd на bdd усуває проблему?
TedTran2019

6
bdd vs tdd - це "тестовий стиль", який передається для мочі через аргументи команд, bdd є типовим, але в шаблоні, створеному vscode, використовується tdd. Напевно, ви використовуєте bdd, оскільки більшість посібників, що розпочали роботу, використовують bdd. Чому vscode використовує tdd за замовчуванням, коли bdd за замовчуванням - поза мною.
Райан Ліч

47

Щоб запустити тести з вузлом / npm, не встановлюючи Mocha глобально, ви можете зробити це:

• Встановіть 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: Минуло два роки, але щось інакше або змінилося. Ніякого великого, але, можливо, це комусь допоможе. Я в Windows 10 з Mocha 4.01, встановленим у всьому світі. Я маю вказати на mocha \ bin \ mocha, як йдеться в примітці кантера.
BaldEagle

Щоб я працював, мені довелося включити цільову папку, як це:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Альвін Кеслер

22

Ви також можете зробити так:

  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


З посилань> Інтерфейс вимагає не можна запустити через виконуваний вузол, а його потрібно запустити через mocha. Питання задається питанням запуску через вузол.
вісімдесят

1
Я пишу пізніше і маю різний досвід. У випадку, якщо це комусь допоможе ... Я перебуваю на Windows 10 з моккою 4.01 та chai 4.1.2, встановленими в усьому світі. Тут мені не потрібні перші три змінні; Мені потрібен четвертий. @eighteyes: Я не знайшов, як запустити Mocha безпосередньо. Я працюю через "node <повний шлях до mocha \ bin \ mocha> <відносний шлях до тестового файлу>".
BaldEagle

1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itце насправді зайве. Ви можете var {describe, it} = require('mocha')виконати завдання для деструктуризації
ES6

6

У мене є ця помилка при використанні "--ui tdd". видаліть це або скористайтеся проблемою виправлення "--ui bdd".


5

ОП запитав про біг з nodeне з mocha. Це дуже поширений випадок використання, див. Використання Mocha Programatic

Це те, що вводиться описом, і це в мої тести.

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

Я намагався, tddяк у документах, але це не спрацювало, хоч bdd працював.


Велике спасибі! Хоча я знаю, що describeдоступний лише для BDD і не доступний для 'TDD', якимось чином у сценарії налаштування я використав TDD і продовжував думати, що я налаштований як 'BDD'. Пошук в Інтернеті не допомагає, оскільки я сприйняв це, я зробив правильну настройку (BDD), але все-таки я отримую помилку. Тільки ваше рішення (яке є унікальним для будь-яких інших рішень, знайдених в результатах пошуку в Інтернеті) змусило мене додати додатковий код, який перемінив мою неправильну установку і, нарешті, спрацював. Тільки під час іншої настройки конфігурації я побачив друкарську помилку та після виправлення її на "BDD", вищевказаний код не потрібен.
ВанагаS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.