ReferenceError: jelaskan tidak didefinisikan NodeJs

160

Saya mencoba mendefinisikan beberapa titik akhir dan melakukan tes menggunakan nodejs. Dalam server.jsaku punya:

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);

dan di func1.js:

    var testend = function(req, res) {
           serialPort.write("1", function(err, results) {
           serialPort.write("2" + "\n", function(err, results) {
           });
      });
   });
    exports.testend = testend;

Sekarang test.jssaya mencoba menggunakan titik akhir ini:

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();
                });
        });
});

Tetapi ketika saya menjalankan node test.jssaya mendapatkan kesalahan ini:

menggambarkan ('Akun', fungsi () {
^

ReferenceError: menggambarkan tidak didefinisikan
    di Object. (/test/test.js:9:1)
    di Module._compile (module.js: 456: 26)
    di Object.Module._extensions..js (module.js: 474: 10)
    di Module.load (module.js: 356: 32)
    di Function.Module._load (module.js: 312: 12)
    di Function.Module.runMain (module.js: 497: 10)
    saat startup (node.js: 119: 16)
    di node.js: 906: 3

Bagaimana saya bisa memperbaiki masalah ini?

N34
sumber
1
Apa yang Anda harapkan describe()dan di mana itu didefinisikan? Dalam melihat file test.js Anda, tidak ada simbol describeyang didefinisikan di sana.
jfriend00
1
menggambarkan () adalah bagian dari Jasmine.
Keith Tyler
1
Kesenjangan dokumentasi yang menyebabkan pertanyaan ini diperbaiki pada November 2016 , tetapi mungkin hanya sampai di situs web baru-baru ini dengan merilis versi 4.1.0.
devius

Jawaban:

197

Dengan asumsi Anda menguji melalui mocha, Anda harus menjalankan tes Anda menggunakan mochaperintah, bukan nodedieksekusi.

Jadi, jika Anda belum melakukannya, pastikan Anda melakukannya npm install mocha -g. Kemudian jalankan saja mochadi direktori root proyek Anda.

mscdex
sumber
16
Bagaimana jika saya ingin membuat fungsi moka tersedia untuk simpul?
abhisekp
12
Dokumen mocha di mochajs.org secara khusus gagal menyebutkan ini ...
Richard Ev
3
tidak perlu menginstal global mocha, cukup gunakan "test": "./node_modules/.bin/mocha -V"di bagian skrip package.json dan instal mocha sebagai satu lagi ketergantungan
Lukas Liesis
2
@LukasLiesadalah tidak perlu ./node_modules/.bin, jalan ini sudah dimuat saat Anda menggunakan npm runatau yarn, jadi cukup "test": "mocha -V" sudah cukup
Felipe Sabino
@FelipeSabino terima kasih untuk menunjukkan ini tetapi ketika Anda baru mocha -Vsaja tidak jelas apakah itu dimuat dari global atau lokal itu sebabnya saya masih lebih suka menunjukkan jalan meskipun tidak diperlukan oleh sistem
Lukas Liesis
133

jika Anda menggunakan vscode, ingin men-debug file Anda

Saya menggunakan tddsebelumnya, itu melemparReferenceError: describe is not defined

Tapi, ketika saya gunakan bdd, itu berhasil!

buang setengah hari untuk menyelesaikannya ....

    {
      "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"
},
toffee
sumber
Wow! melihat ini setelah hanya menyelesaikan masalah.
nonybrighto
Terima kasih! Menyelamatkan saya banyak waktu!
Brad W
Ini juga berlaku untuk WebStorm (yang aneh)
yentsun
4
Terima kasih atas jawabannya, buat semuanya berfungsi !! Bagaimana cara kerjanya? Bagaimana mengubah tdd ke bdd memperbaiki masalah?
TedTran2019
6
bdd vs tdd adalah 'gaya uji' yang diteruskan ke mocha melalui argumen perintah, bdd adalah default, tetapi templat vscode yang dihasilkan menggunakan tdd. Anda mungkin menggunakan bdd, karena sebagian besar panduan memulai menggunakan bdd. Mengapa vscode menggunakan tdd sebagai default, ketika bdd adalah default, berada di luar jangkauan saya.
Ryan The Leach
47

Untuk menjalankan tes dengan node / npm tanpa menginstal Mocha secara global, Anda dapat melakukan ini:

• Instal Mocha secara lokal ke proyek Anda ( npm install mocha --save-dev)

• Secara opsional menginstal perpustakaan pernyataan ( npm install chai --save-dev)

• Di Anda package.json, tambahkan bagian untuk scriptsdan targetkan binari moka

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

• Letakkan file spesifikasi Anda di direktori bernama /testdi direktori root Anda

• Dalam file spesifikasi Anda, impor perpustakaan pernyataan

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

• Anda tidak perlu mengimpor moka, lari mocha.setup, atau meneleponmocha.run()

• Kemudian jalankan skrip dari root proyek Anda:

npm test
cantera
sumber
7
Di jalur tes Anda, Anda tidak lagi harus menunjuk ke folder mocha bin, cukup cantumkan mocha, itu akan berhasil.
Adrian Lynch
1
Jika Anda ingin perintah ini menjalankan semua tes di direktori '/ test', termasuk sub-direktori, maka masukkanmocha --recursive
Luke Gallione
1
@AdrianLynch: Sudah dua tahun, tetapi ada sesuatu yang berbeda atau berubah. Bukan biggee, tapi mungkin itu akan membantu seseorang. Saya menggunakan Windows 10 dengan Mocha 4.01 diinstal secara global. Saya harus menunjuk ke mocha \ bin \ mocha, seperti kata cantera.
BaldEagle
Agar saya bisa bekerja, saya harus memasukkan folder target seperti ini:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler
22

Anda juga bisa melakukan ini:

  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)
    })
  })

Referensi: http://mochajs.org/#require

subhojit777
sumber
Dari ref> Antarmuka yang diperlukan tidak dapat dijalankan melalui node yang dapat dieksekusi, dan harus dijalankan melalui moka. Pertanyaannya adalah bertanya tentang menjalankan melalui simpul.
Eighteyes
1
Saya menulis nanti dan memiliki pengalaman yang berbeda. Dalam hal ini membantu seseorang ... Saya menggunakan Windows 10 dengan mocha 4.01 dan chai 4.1.2 diinstal secara global. Saya tidak membutuhkan tiga variabel pertama di sini; Saya membutuhkan yang keempat. @eighteyes: Saya belum menemukan cara menjalankan Mocha secara langsung. Saya sedang menjalankan melalui "simpul <path lengkap ke mocha \ bin \ mocha> <path relatif untuk menguji file>".
BaldEagle
1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itini sebenarnya berlebihan. Anda dapat var {describe, it} = require('mocha')dengan penugasan penghancuran
ES6
6

saya memiliki kesalahan ini saat menggunakan "--ui tdd". hapus ini atau gunakan memperbaiki masalah "--ui bdd".

GraySe7en
sumber
5

OP bertanya tentang lari dari nodebukan dari mocha. Ini adalah kasus penggunaan yang sangat umum, lihat Menggunakan Mocha Secara Programatis

Inilah yang disuntikkan menggambarkan dan itu ke dalam tes saya.

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

Saya mencoba tddseperti dalam dokumen, tetapi itu tidak berhasil, bdd bekerja.

delapan mata
sumber
Terima kasih banyak! Sementara saya sadar bahwa describehanya tersedia dengan BDD dan tidak tersedia untuk 'TDD', entah bagaimana dalam skrip setup, saya menggunakan TDD & terus berpikir bahwa saya mengkonfigurasi sebagai 'BDD'. Pencarian Internet tidak membantu, karena persepsi saya adalah, saya melakukan pengaturan yang benar (BDD), tetapi saya masih mendapatkan kesalahan. Ini hanya solusi Anda, (yang unik dari solusi lain yang ditemukan di hasil pencarian Internet) membuat saya menambahkan kode tambahan yang mengesampingkan pengaturan yang salah dan akhirnya berhasil. Hanya selama konfigurasi konfigurasi lain, saya melihat kesalahan ketik saya & setelah memperbaikinya menjadi 'BDD', kode di atas tidak diperlukan.
VanagaS