ReferenceError:describeが定義されていないNodeJ


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と次のエラーが発生します。

describe( 'Account'、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

1
describe()はJasmineの一部です。
キー

1
この質問につながったドキュメントのギャップは2016年11月に修正されましたが、おそらくバージョン4.1.0のリリースで最近Webサイトに到達しただけです。
devius

回答:


197

を介してテストしているmocha場合mochanode実行可能ファイルではなくコマンドを使用してテストを実行する必要があります。

そのため、まだ行っていない場合は、行ってくださいnpm install mocha -g。次にmocha、プロジェクトのルートディレクトリで実行します。


16
ノードでモカ機能を使用できるようにするにはどうすればよいですか?
abhisekp

12
mochajs.orgのモカドキュメントでは、これについては特に言及していません...
Richard Ev

3
グローバルモカをインストールするための必要性、ちょうど使用なし"test": "./node_modules/.bin/mocha -V"package.jsonのスクリプトセクションでと1つの以上の依存関係として、モカをインストール
ルーカス・Liesis

2
@LukasLiesisは必要ありません./node_modules/.bin。このパスはnpm runまたはを使用するときに既にロードされているyarnため、「test」:「mocha -V」で十分です
Felipe Sabino

@FelipeSabinoこれを指してくれてありがとうしかし、あなたはちょうどているmocha -Vそれは、私はまだそれがシステムによって必須ではありません場合でも、パスを表示することを好む理由ですそのグローバルまたはローカルからロードされた場合、それははっきりしていない
ルーカス・Liesis

131

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 '31

6
bdd vs tddはコマンド引数を介してmochaに渡される「テストスタイル」です。bddがデフォルトですが、vscode生成テンプレートはtddを使用します。ほとんどのスタートガイドではbddを使用しているため、おそらくbddを使用しています。vscodeがデフォルトとしてtddを使用する理由、bddがデフォルトである理由は私を超えています。
ライアンザリーチ

47

Mochaをグローバルにインストールせずにnode / npmでテストを実行するには、次のようにします。

•プロジェクトにローカルにMochaをインストールする(npm install mocha --save-dev

•オプションでアサーションライブラリをインストールする(npm install chai --save-dev

•で、モカバイナリのpackage.jsonセクションを追加しscriptsてターゲットにします

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

•specファイルを/testルートディレクトリにあるディレクトリに配置します。

•specファイルで、アサーションライブラリをインポートします

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

• モカをインポートしたり、実行したり、呼び出したりする必要ありませんmocha.setupmocha.run()

•次に、プロジェクトルートからスクリプトを実行します。

npm test

7
テストラインでは、mocha binフォルダーをポイントする必要がなくなり、を置くだけmochaで機能します。
エイドリアンリンチ

1
このコマンドで、サブディレクトリを含む「/ test」ディレクトリ内のすべてのテストを実行する場合は、次のように入力しますmocha --recursive
Luke Gallione

1
@AdrianLynch:2年経ちましたが、何かが変わったり変更されたりしました。大きな問題はありませんが、多分それは誰かを助けるでしょう。私は、Mocha 4.01がグローバルにインストールされたWindows 10を使用しています。canteraのメモが言うように、私はmocha \ bin \ mochaをポイントする必要があります。
BaldEagle 2017年

私が機能するために私はこのようなターゲットフォルダを含める必要がありました:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
アルウィンケスラー

21

次のようにすることもできます:

  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から> requireインターフェースはノード実行可能ファイルを介して実行することはできず、mochaを介して実行する必要があります。問題は、ノードを介して実行することについて尋ねています。
eighteyes 2017

1
私は後で書いていて、異なる経験をしています。それが誰かを助ける場合...私はモカ4.01とチャイ4.1.2がグローバルにインストールされたWindows 10を使っています。ここでは最初の3つの変数は必要ありません。4つ目が必要です。@eighteyes:Mochaを直接実行する方法がわかりません。「ノード<mocha \ bin \ mochaへのフルパス> <テストファイルへの相対パス>」で実行しています。
BaldEagle 2017年

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

OPはからで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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.