ReferenceError: Tarif tanımlanmamış Düğümler


160

Bazı uç noktaları tanımlamaya ve kullanarak bir test yapmaya çalışıyorum nodejs. In server.jsI sahiptir:

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

ve içinde func1.js:

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

Şimdi test.jsbu uç noktayı kullanmaya çalışıyorum:

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

Ama çalıştırdığımda node test.jsbu hatayı alıyorum:

açıkla ('Hesap', işlev () {
^

ReferenceError: tanımlanmıyor
    Object'te. (/Test/test.js:9:1)
    Module._compile'da (module.js: 456: 26)
    Object.Module._extensions..js (module.js: 474: 10) adresinde
    Module.load'da (module.js: 356: 32)
    Function.Module._load'da (module.js: 312: 12)
    Function.Module.runMain (module.js: 497: 10)
    başlangıçta (node.js: 119: 16)
    node.js'de: 906: 3

Sorunu nasıl düzeltebilirim?


1
Ne olmasını bekliyorsunuz describe()ve nerede tanımlanıyor? Test.js dosyanıza baktığınızda, orada describetanımlanmış bir sembol yoktur .
jfriend00

1
define (), Yasemin'in bir parçasıdır.
Keith Tyler

1
Bu soruya yol açan dokümantasyon boşluğu Kasım 2016'da düzeltildi , ancak muhtemelen sadece son zamanlarda 4.1.0 sürümü ile web sitesine ulaştı.
devius

Yanıtlar:


197

Üzerinden test yaptığınızı varsayarsak, testlerinizi mochaçalıştırılabilir mochayerine komutunu kullanarak çalıştırmanız gerekir node.

Yani henüz yapmadıysanız, yaptığınızdan emin olun npm install mocha -g. Ardından mochaprojenizin kök dizininde çalıştırın .


16
Mocha işlevlerini düğüm için kullanılabilir hale getirmek istersem ne olur?
abhisekp

12
Mochajs.org'daki mocha dokümanlar bundan bahsetmezler ...
Richard Ev

3
küresel mocha yüklemesine gerek yok, sadece "test": "./node_modules/.bin/mocha -V"package.json'ın komut dosyaları bölümünde kullanın ve
mocha'yı bir

2
@LukasLiesis gerek yok ./node_modules/.bin, bu yol kullandığınızda zaten yüklü npm runveya yarnbu yüzden sadece "test": "mocha -V" yeterli olacaktır
Felipe Sabino

@FelipeSabino bunu işaret ettiğiniz için teşekkür ederiz, ancak mocha -Vglobal veya yerelden yüklenmiş olup olmadığı net olmadığında, bu yüzden sistem tarafından gerekli olmasa bile yolu göstermeyi tercih ederim
Lukas Liesis

133

vscode kullanıyorsanız dosyalarınızda hata ayıklamak istiyorsanız

Daha tddönce kullanmıştımReferenceError: describe is not defined

Ama kullandığımda bddişe yarıyor!

çözmek için yarım gün israf ....

    {
      "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"
},

Vaov! sorunu çözdükten sonra bunu görüyoruz.
nonybrighto

Teşekkür ederim! Beni çok kurtardı!
Brad W

Bu aynı zamanda WebStorm (bu garip) için de geçerlidir
yentsun

4
Cevabınız için teşekkürler, her şeyi işe yaradı! Bu nasıl çalışıyor? Tdd'yi bdd olarak değiştirmek sorunu nasıl çözer?
TedTran2019

6
bdd vs tdd, komut bağımsız değişkenleri aracılığıyla mocha'ya iletilen 'test stili'dir, bdd varsayılan değerdir, ancak vscode tarafından oluşturulan şablonda tdd kullanılır. Başlangıç ​​kılavuzlarının çoğu bdd kullandığından, muhtemelen bdd kullanıyorsunuzdur. Vscode neden tdd'yi varsayılan olarak kullanır, bdd varsayılan olduğunda, benden öte.
Ryan The Leach

47

Mocha'yı global olarak yüklemeden düğüm / npm ile testler yapmak için şunları yapabilirsiniz:

• Mocha'yı yerel olarak projenize kurun ( npm install mocha --save-dev)

• İsteğe bağlı olarak bir onaylama kitaplığı ( npm install chai --save-dev) yükleyin

• İçinde mocha ikili dosyası package.jsoniçin bir bölüm ekleyin scriptsve hedefleyin

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

• Spec dosyalarınızı /testkök dizininizdeki bir dizine koyun

• Spesifikasyon dosyalarınızda onaylama kütüphanesini içe aktarın

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

• Mocha, run veya call ithal etmenize gerek yokmocha.setupmocha.run()

• Daha sonra komut dosyasını proje kökünüzden çalıştırın:

npm test

7
Test satırınızda artık mocha bin klasörünü göstermeniz gerekmiyor, sadece koy mocha, işe yarayacak.
Adrian Lynch

1
Bu komutun alt dizinler dahil olmak üzere '/ test' dizinindeki tüm testleri çalıştırmasını istiyorsanız, o zaman şunu koyunmocha --recursive
Luke Gallione

1
@AdrianLynch: İki yıl geçti, ama bir şey farklı ya da değişti. Biggee yok, ama belki birine yardım eder. Dünyada Mocha 4.01 yüklü Windows 10 kullanıyorum. Cantera'nın notunun dediği gibi mocha \ bin \ mocha'ya işaret etmem gerekiyor.
BaldEagle

{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Çalışmam

22

Bunu da yapabilirsiniz:

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

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


Ref> Require arayüzü çalıştırılabilir düğüm üzerinden çalıştırılamaz ve mocha aracılığıyla çalıştırılmalıdır. Soru, düğüm yoluyla çalıştırma hakkında sormaktır.
eighteyes

1
Daha sonra yazıyorum ve farklı deneyimler yaşıyorum. Birine yardım etmesi durumunda ... Windows 10'da mocha 4.01 ve global olarak yüklü chai 4.1.2 kullanıyorum. Burada ilk üç değişkene ihtiyacım yok; Dördüne ihtiyacım var. @eighteyes: Mocha'yı doğrudan nasıl çalıştıracağımı bulamadım. "Düğüm <mocha \ bin \ mocha için tam yol> <test dosyasını göreli yolu>" üzerinden çalıştırıyorum.
BaldEagle

1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itbu aslında gereksizdir. var {describe, it} = require('mocha')ES6 yıkım ataması
user5532169

6

"--ui tdd" kullanırken bu hata var. bunu kaldırın veya "--ui bdd" düzeltme sorununu kullanın.


5

OP nodedeğil koşma hakkında sordu mocha. Bu çok yaygın bir kullanım durumudur, bkz . Mocha'yı Programlı Kullanma

Enjekte edilen bu tarif ve testlerimde.

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

tddDokümanlardaki gibi denedim , ama bu işe yaramadı, bdd yine de çalıştı.


Çok teşekkür ederim! Ben farkında olduğum sürece describeher nasılsa kurulum komut, sadece BDD olan mevcut ve 'TDD' için kullanılamaz, ben 'BDD' olarak yapılandırılan bu TDD & tuttu düşünme kullanılır. İnternet aramanın yardımı yok, benim algılarım olduğu gibi, doğru kurulumu (BDD) yaptım, ama yine de hata alıyorum. Bu sadece sizin çözümünüzdür (İnternet arama sonuçlarında bulunan diğer çözümlerden benzersizdir), yanlış ayarımı geçersiz kılan ve sonunda işe yarayan ek kod eklememi sağladı. Sadece diğer yapılandırma kurulumu sırasında, yazımımı gördüm ve 'BDD'ye' düzelttikten sonra yukarıdaki kod gerekli değildi.
VanagaS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.