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я получаю эту ошибку:

описать («Аккаунт», функция () {
^

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
Описание () является частью Жасмин.
Кит Тайлер

1
Недостаток документации, который привел к этому вопросу, был исправлен в ноябре 2016 года , но, вероятно, только недавно появился на сайте с выпуском версии 4.1.0.
Деви

Ответы:


197

Предполагая, что вы тестируете через mocha, вы должны запускать свои тесты, используя mochaкоманду вместо nodeисполняемого файла.

Так что, если вы еще этого не сделали, убедитесь, что вы делаете npm install mocha -g. Затем просто запустите mochaв корневом каталоге вашего проекта.


16
Что если я хочу сделать функции mocha доступными для узла?
abhisekp

12
В документах mocha на mochajs.org не упоминается об этом ...
Ричард Эв,

3
нет необходимости в глобальной установке mocha, просто используйте "test": "./node_modules/.bin/mocha -V"в скриптах раздел package.json и установите mocha как еще одну зависимость
Lukas Liesis

2
@LukasLiesis не нужно ./node_modules/.bin, этот путь уже загружен, когда вы используете npm runили yarn, так что просто «test»: достаточно «mocha -V»
Felipe Sabino

@FelipeSabino спасибо за указание на это, но когда у вас есть только mocha -Vне ясно, был ли он загружен из глобального или локального, поэтому я все еще предпочитаю показывать путь, даже если он не требуется системой
Lukas Liesis

133

если вы используете 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

6
bdd vs tdd - это «тестовый стиль», передаваемый mocha с помощью аргументов команды, 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в вашем корневом каталоге

• В ваших spec-файлах импортируйте библиотеку утверждений

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

• Вам не нужно импортировать мокко, запустить mocha.setupили позвонитьmocha.run()

• Затем запустите скрипт из корня вашего проекта:

npm test

7
В вашей тестовой строке вам больше не нужно указывать на папку mocha bin, просто поставьте mocha, она будет работать.
Адриан Линч

1
Если вы хотите, чтобы эта команда выполняла все тесты в каталоге '/ test', включая подкаталоги, то mocha --recursive
Luke

1
@AdrianLynch: Прошло два года, но что-то изменилось или изменилось. Нет, да, но, может быть, это кому-нибудь поможет. Я на Windows 10 с Mocha 4.01 установлен во всем мире. Я должен указать на мокко \ бин \ мокко, как говорится в записке Кантеры.
BaldEagle

Чтобы я мог работать, мне нужно было включить целевую папку следующим образом:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin

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


От ref> Требуемый интерфейс не может быть запущен через исполняемый файл узла, и должен быть запущен через 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

ОП спросил о том, что убегал nodeне из mocha. Это очень распространенный вариант использования, см. Использование Мокко Программно

Это то, что впрыснуло описание и это в мои тесты.

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

Я пытался tddкак в документах, но это не сработало, хотя BDD работал.


Большое спасибо! Хотя я знаю, что describeон доступен только с BDD и недоступен для «TDD», каким-то образом в сценарии установки я использовал TDD и продолжал думать, что я настроил его как «BDD». Поиск в интернете не помогает, так как мое мнение таково, что я сделал правильную настройку (BDD), но все равно получаю ошибку. Это только ваше решение (которое уникально среди других решений, найденных в результатах поиска в Интернете), заставило меня добавить дополнительный код, который переопределил мои неправильные настройки и, наконец, сработал. Это только во время другой настройки конфигурации, я видел мою опечатку и после исправления его до «BDD», приведенный выше код не требовался.
ВанагаС
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.