ReferenceError : 설명이 정의되지 않은 NodeJ


165

일부 끝점을 정의하고 nodejs. 에서 server.jsI 있습니다 :

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 ( '계정', 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 2015

2
describe ()는 Jasmine의 일부입니다.
Keith Tyler

1
이 질문으로 이어진 문서 차이는 2016 년 11 월 에 수정 되었지만 아마도 최근 버전 4.1.0의 릴리스와 함께 웹 사이트에 올랐을 것입니다.
devius

답변:


204

를 통해 테스트한다고 가정하면 대신 명령을 mocha사용하여 테스트를 실행해야 mocha합니다.node 실행 파일 .

따라서 아직하지 않았다면 npm install mocha -g. 그런 다음 mocha프로젝트의 루트 디렉토리에서 실행 하십시오.


16
노드에서 mocha 기능을 사용하려면 어떻게해야합니까?
abhisekp 2015 년

12
mochajs.org 의 mocha 문서는 이것을 언급하지 않습니다 ...
Richard Ev

3
글로벌 모카 필요는 사용, 설치하지 "test": "./node_modules/.bin/mocha -V"package.json의 스크립트 섹션과 하나 더 의존성을 모카를 설치
루카스 Liesis을

2
필요를 @LukasLiesis하지 ./node_modules/.bin사용할 때이 경로가 이미로드, npm run또는 yarn, 그래서 그냥 "테스트": "모카 -V"충분
펠리페 비노

이 가리키는하지만 당신은 단지 때를위한 @FelipeSabino 감사 mocha -V는이로드 된 경우 분명하지 않다 전역 또는의 왜 난 아직이 시스템에 필요한 아닌 경우에도 경로 보여주기 위해 선호하는 지역
루카스 Liesis

145

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

감사합니다! 많은 시간을 절약했습니다!
Brad W

이 위해도 마찬가지입니다 (이상한) WebStorm
yentsun가

4
답 해주셔서 감사합니다. 그래도 어떻게 작동합니까? tdd를 bdd로 변경하면 문제가 어떻게 해결됩니까?
TedTran2019

7
bdd 대 tdd는 명령 인수를 통해 mocha에 전달되는 '테스트 스타일'이고, bdd가 기본값이지만 vscode 생성 템플릿은 tdd를 사용합니다. 대부분의 시작 안내서에서 bdd를 사용하므로 bdd를 사용하고있을 것입니다. bdd가 기본값 일 때 vscode가 tdd를 기본값으로 사용하는 이유는 저를 넘어 섭니다.
Ryan The Leach

48

Mocha를 전역 적으로 설치하지 않고 node / npm으로 테스트를 실행하려면 다음을 수행하십시오.

• 프로젝트에 로컬로 Mocha를 설치합니다 (npm install mocha --save-dev )

• 선택적으로 어설 션 라이브러리 (npm install chai --save-dev )

• 에서 mocha 바이너리에 package.json대한 섹션을 추가 scripts하고 타겟팅합니다.

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

• 사양 파일을 /test 루트 디렉토리에

• 사양 파일에서 어설 션 라이브러리를 가져옵니다.

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

• mocha를 가져 오거나 , 실행 하거나, 전화 할 필요 가 없습니다.mocha.setupmocha.run()

• 그런 다음 프로젝트 루트에서 스크립트를 실행합니다.

npm test

7
테스트 라인에서 더 이상 mocha bin 폴더를 가리킬 필요가 없습니다. 그냥 넣기 만하면 mocha됩니다.
Adrian Lynch

1
당신이 하위 디렉토리를 포함하여 '/ 테스트'디렉토리에있는 모든 테스트를 실행하려면이 명령을 원하는 경우, 다음 넣어mocha --recursive
누가 복음 Gallione

1
@AdrianLynch : 2 년이 지났지 만 뭔가 다르거 나 변경되었습니다. 큰 문제는 아니지만 누군가에게 도움이 될 수도 있습니다. 전 세계적으로 Mocha 4.01이 설치된 Windows 10을 사용하고 있습니다. 나는 cantera의 노트가 말하는 것처럼 mocha \ bin \ mocha를 가리켜 야합니다.
BaldEagle 2011

작업하려면 다음과 같은 대상 폴더를 포함해야했습니다.{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler

23

다음과 같이 할 수도 있습니다.

  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


참조에서> require 인터페이스는 노드 실행 파일을 통해 실행할 수 없으며 mocha를 통해 실행해야합니다. 질문은 노드를 통한 실행에 대해 묻는 것입니다.
eighteyes jul.

1
나는 나중에 글을 쓰고 다른 경험을 가지고 있습니다. 누군가에게 도움이 될 경우 ... 저는 Windows 10에 mocha 4.01과 chai 4.1.2가 전 세계적으로 설치되어 있습니다. 여기서 처음 세 개의 변수는 필요하지 않습니다. 네 번째가 필요합니다. @eighteyes : Mocha를 직접 실행하는 방법을 찾지 못했습니다. "node <mocha \ bin \ mocha의 전체 경로> <테스트 파일의 상대 경로>"를 통해 실행 중입니다.
BaldEagle 2011

1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.it이것은 실제로 중복됩니다. var {describe, it} = require('mocha')ES6로 할 수 있습니다. 할당 destructuring
user5532169

6

영업 이익에서 실행에 대해 질문 node하지에서 mocha. 이것은 매우 일반적인 사용 사례입니다. 프로그래밍 방식으로 Mocha 사용을

이것이 주입 된 설명이며 내 테스트에 적용됩니다.

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

나는 tdd문서 에서처럼 시도했지만 작동하지 않았지만 bdd는 작동했습니다.


대단히 감사합니다! describeBDD에서만 사용할 수 있고 'TDD'에서는 사용할 수 없다는 것을 알고 있지만 어떻게 든 설정 스크립트에서 TDD를 사용하고 'BDD'로 구성했다고 생각했습니다. 인터넷 검색은 도움이되지 않습니다. 제 생각에는 올바른 설정 (BDD)을했지만 여전히 오류가 발생합니다. (인터넷 검색 결과에서 찾은 다른 솔루션과는 다른) 유일한 솔루션으로 인해 잘못된 설정을 무시하고 마침내 작동하는 추가 코드를 추가했습니다. 다른 구성 설정 중에 만 오타를 보았고 'BDD'로 수정 한 후 위의 코드가 필요하지 않았습니다.
VanagaS

6

"--ui tdd"를 사용할 때이 오류가 발생합니다. 이것을 제거하거나 "--ui bdd"수정 문제를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.