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हूं तो मुझे यह त्रुटि मिलती है:

वर्णन ('खाता', फ़ंक्शन () {
^

संदर्भ संदर्भ: वर्णन परिभाषित नहीं है
    वस्तु पर। (/Test/test.js:9:1)
    मॉड्यूल._कंपाइल पर (मॉड्यूल .js: 456: 26)
    Object.Module._extensions..js (मॉड्यूल.js: 474: 10) पर
    Module.load (मॉड्यूल.js: 356: 32) पर
    फंक्शन पर.मोडुले_ लोड (मॉड्यूल। जेएस: 312: 12)
    समारोह में। मोड्यूल.रुमेन (मॉड्यूल। जेएस: 497: 10)
    स्टार्टअप पर (नोड.जेएस: 119: 16)
    at नोड.जेएस: 906: 3

मैं समस्या को कैसे ठीक कर सकता हूं?


1
आप क्या describe()होने की उम्मीद करते हैं और इसे कहां परिभाषित किया गया है? आपकी test.js फ़ाइल को देखने में, कोई प्रतीक नहीं describeहै जिसे वहां परिभाषित किया जा रहा है।
jfriend00

1
वर्णन () चमेली का हिस्सा है।
कीथ टायलर

1
इस सवाल के कारण प्रलेखन अंतर नवंबर 2016 में तय किया गया था , लेकिन संभवत: हाल ही में इसे 4.1.0 संस्करण के रिलीज के साथ वेबसाइट पर बनाया गया।
देविस

जवाबों:


197

आप के माध्यम से परीक्षण कर रहे हैं mocha, तो आप निष्पादन योग्य के mochaबजाय आदेश का उपयोग कर अपने परीक्षण चलाने के लिए है node

इसलिए यदि आप पहले से ही नहीं हैं, तो सुनिश्चित करें कि आप करते हैं npm install mocha -g। फिर बस mochaअपने प्रोजेक्ट के रूट डायरेक्टरी में दौड़ें ।


16
क्या होगा अगर मैं मोचा कार्यों को नोड के लिए उपलब्ध कराना चाहता हूं?
abhisekp

12
Mochajs.org पर मोचा डॉक्स इस का उल्लेख करने में असफल रहे ...
रिचर्ड ईव

3
वैश्विक मोचा स्थापित करने के लिए कोई ज़रूरत नहीं, बस "test": "./node_modules/.bin/mocha -V"पैकेज की स्क्रिप्ट अनुभाग में उपयोग करें । एक और अधिक निर्भरता के रूप में मोचा स्थापित करें
लुकस लाइसीस

2
@LukasLiesis के लिए कोई ज़रूरत नहीं है ./node_modules/.bin, यह पथ पहले से ही लोड है जब आप उपयोग करते हैं npm runया yarn, तो बस "परीक्षण": "मोचा -वी" पर्याप्त होगा
फेलिप सबिनो

@FelipeSabino इसे इंगित करने के लिए धन्यवाद, लेकिन जब आपके पास अभी mocha -Vयह स्पष्ट नहीं है कि यह वैश्विक या स्थानीय से लोड किया गया था, इसलिए मैं अभी भी पथ दिखाना चाहता हूं, भले ही यह सिस्टम द्वारा आवश्यक न हो
Lukas Liesis

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
जवाब के लिए धन्यवाद, सब कुछ काम किया !! हालांकि यह कैसे काम करता है? समस्या को ठीक करने के लिए टीडीडी को कैसे बदलना है?
TedTran2019

6
bdd बनाम tdd कमांड टेस्ट के माध्यम से mocha को दिया गया 'टेस्ट स्टाइल' है, bdd डिफ़ॉल्ट है, लेकिन vscode जनरेट टेम्पलेट टीडीडी का उपयोग करता है। आप शायद bdd का उपयोग कर रहे हैं, क्योंकि अधिकांश आरंभ किए गए मार्गदर्शक bdd का उपयोग करते हैं। क्यों vscode डिफ़ॉल्ट के रूप में tdd का उपयोग करता है, जब bdd डिफ़ॉल्ट है, मेरे से परे है।
रयान द लीच

47

विश्व स्तर पर मोचा स्थापित किए बिना नोड / एनपीएम के साथ परीक्षण चलाने के लिए, आप यह कर सकते हैं:

• अपनी परियोजना के लिए स्थानीय रूप से मोचा स्थापित करें ( 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.setupmocha.run()

• फिर अपने प्रोजेक्ट रूट से स्क्रिप्ट चलाएँ:

npm test

7
आपकी परीक्षण पंक्ति में, आपको अब मोचा बिन फ़ोल्डर को इंगित नहीं करना है, बस डाल दिया है mocha, यह काम करेगा।
एड्रियन लिंच

1
यदि आप इस आदेश को '/ परीक्षण' निर्देशिका में सभी परीक्षण चलाने के लिए पसंद करते हैं, जिसमें उप-निर्देशिकाएं शामिल हैं, तो mocha --recursive
डालिए

1
@ AdrianLynch: दो साल हो गए हैं, लेकिन कुछ अलग या बदला हुआ है। कोई बड़ा नहीं है, लेकिन शायद यह किसी की मदद करेगा। मैं विश्व स्तर पर स्थापित मोचा 4.01 के साथ विंडोज 10 पर हूं। मुझे mocha \ bin \ mocha को इंगित करना है, जैसे कैंटर का नोट कहता है।
बाल्डेगल

मेरे काम करने के लिए मुझे लक्ष्य फ़ोल्डर को इस तरह शामिल करना था:{"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


रेफ से> आवश्यकता इंटरफ़ेस नोड निष्पादन योग्य के माध्यम से नहीं चलाया जा सकता है, और मोचा के माध्यम से चलाया जाना चाहिए। सवाल नोड के माध्यम से चलने के बारे में पूछ रहा है।
अठाइस

1
मैं बाद में लिख रहा हूं और अलग अनुभव रहा हूं। मामले में यह किसी की मदद करता है ... मैं mocha 4.01 और chai 4.1.2 के साथ विंडोज 10 पर हूं। मुझे यहाँ पहले तीन चर की आवश्यकता नहीं है; मुझे चौथा चाहिए। @eighteyes: मुझे नहीं पता कि मोचा को सीधे कैसे चलाना है। मैं "नोड <पूर्ण पथ से mocha \ bin \ mocha> <सापेक्ष पथ परीक्षण फ़ाइल के लिए" चला रहा हूं।
बाल्डेगल

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डॉक्स में पसंद करने की कोशिश की, लेकिन वह काम नहीं किया, हालांकि काम किया।


आपका बहुत बहुत धन्यवाद! जबकि मुझे पता है कि describeकेवल BDD के साथ उपलब्ध है और 'TDD' के लिए उपलब्ध नहीं है, किसी तरह सेटअप स्क्रिप्ट में, मैंने TDD का उपयोग किया और यह सोचता रहा कि मैंने 'BDD' के रूप में कॉन्फ़िगर किया है। इंटरनेट खोज कोई मदद नहीं है, क्योंकि मेरी धारणा यह थी कि, मैंने सही सेटअप (BDD) किया था, लेकिन फिर भी मुझे त्रुटि मिलती है। यह केवल आपका समाधान है, (जो इंटरनेट खोज परिणामों पर पाए गए किसी अन्य समाधान से अद्वितीय है) ने मुझे अतिरिक्त कोड जोड़ दिया जो मेरी गलत सेटिंग को ओवररोड करता है और अंत में काम करता है। इसकी केवल अन्य कॉन्फ़िगरेशन सेटअप के दौरान, मैंने अपने टाइपो को देखा और इसे 'BDD' में सही करने के बाद, ऊपर कोड की आवश्यकता नहीं थी।
वनागास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.