サマリー
VisualStudioCodeのNode.js Mocha testのデバッグ実行で、ReferenceError: describe is not defined
のエラーがでる人は、VisualStudioCodeのlounch.jsonのtdd
をbdd
に変更するとエラーが解消される。
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-u",
"bdd",
"--timeout",
"999999",
"--colors",
"${workspaceFolder}/test"
],
"internalConsoleOptions": "openOnSessionStart"
},
現象
VisualStudioCodeのNode.js Mocha testをデバッグ実行すると、以下のエラーがでるようになった。
- 環境
- VisualStudioCode: 1.32.3
- mocha: 6.0.2
/Users/hoge/.nodebrew/current/bin/node --inspect-brk=16665 node_modules/mocha/bin/_mocha -u tdd --timeout 999999 --colors /Users/hoge/Git/my-project/test
Debugger listening on ws://127.0.0.1:16665/0cd5be4c-b761-4eb0-b934-0c3d7df7f99b
Debugger attached.
/Users/hoge/Git/my-project/node_modules/yargs/yargs.js:1148
else throw err
^
ReferenceError: describe is not defined
at Object.<anonymous> (/Users/hoge/Git/my-project/test/index.spec.js:20:1)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
原因
mocha 6.0.0から、RCファイルがサポートされたり、yargsでオプションを解析するようになった関係で、今まで、たまたま動作していた部分が動かなくなったようです。
・add config file support; switch to yargs #3556
Visual Studio Codeがデフォルトで指定する--u tdd
は、TDD方式を意味していて、こんな書き方です。
mocha.setup('tdd');
suite('something', function() {
setup(function() {
});
test('should work', function() {
});
teardown(function() {
});
});
一方、mochaのチュートリアルに記載されている書き方はBDD方式で、こんな書き方です。
mocha.setup('bdd');
describe('something', function() {
beforeEach(function() {
});
it('should work', function() {
});
});
Visual Studio Codeのlounch.jsonに--u tdd
とある場合は、TDD方式を想定しているため、BDD方式のdescribe
に対して ReferenceError: describe is not defined
のエラーメッセージがでます。
Mocha version 6.0.0
実行オプションの指定に関する機能拡張がありました。
-
--no-timeouts
デバッグ時にタイムアウトしないように指定できるようになりました。
今まで、--timeout 999999
のおまじないを書いていましたが、これの代わりです。 -
RCファイル
mochaの実行オプションを設定ファイル(RCファイル)で記載できるようになりました。
RCファイルは以下が可能です。-
.mocharc.js
-
.mocharc.json
-
.mocharc.yaml
-
.mocharc.yml
mocharc.json{ "diff": true, "extension": ["js"], "opts": "./test/mocha.opts", "package": "./package.json", "reporter": "spec", "slow": 75, "timeout": 2000, "ui": "bdd" }
特定のRCファイルを指定して実行したい場合は、
--config /path/to/rc/file
オプションを指定します。 -
-
package.json
設定は、package.json
にも記載可能です。package.json"mocha": { "diff": true, "extension": ["js"], "opts": "./test/mocha.opts", "package": "./package.json", "reporter": "spec", "slow": 75, "timeout": 2000, "ui": "bdd" }
特定の
package.json
を指定して実行したい場合は、--package /path/to/package.json
オプションを指定します。 -
設定の優先順位
設定は、以下の順に適用されます。- Command-line arguments
- RC file
- package.json
- mocha.opts
- Mocha's own defaults
-
設定の無効化
--no-config
や--no-package
を指定すると設定を無効にできます。