Visual Studio Codeを使用してMochaテストにブレークポイントを追加することは可能ですか?
通常、コードをデバッグするときは、launch.jsonを構成し、実行するjavascriptファイルにプログラム属性を設定する必要があります。モカのためにこれを行う方法はわかりませんが。
ご存知でしたか、起動設定に入るだけで、他の設定の後または間にカーソルを置き、を押します ctrl-space 自動生成された最新の有効なmocha configを取得するには?
それは私にとって完璧に動作します。ブレークポイントでの停止を含む。 (私は以前の、今では時代遅れのものも持っていましたが、それはさまざまな設定関連の理由でもういませんでした。)
VSCode 1.21.1(2018年3月)以降、次のようになります:
{
"version": "0.2.0",
"configurations": [
{
"name": "Mocha (Test single file)",
"type": "node",
"request": "launch",
"runtimeArgs": [
"${workspaceRoot}/node_modules/.bin/mocha",
"--inspect-brk",
"${relativeFile}",
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"port": 9229
}
}
補足:debug-brk
deprectated (少なくともNode> =バージョン8を持つ人)。
--debug-brk
+ Attachを使用したくない、またはグローバルmochaインストールへの絶対パスを指定したくない場合(launch.jsonをバージョン管理下に置き、異なるマシンに複数の開発者がいる場合はブレーキがかかります)、mochaをインストールしますdev依存関係として、これをlaunch.jsonに追加します。
{
"name": "mocha",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"args": ["--no-timeouts", "--colors"], //you can specify paths to specific tests here
"cwd": "${workspaceRoot}",
"runtimeExecutable": null,
"env": {
"NODE_ENV": "testing"
}
}
F5を押すだけで、テストの完全なデバッグをサポートします。
--no-timeouts
は、ブレークポイントで停止したためにテストがタイムアウトしないようにし、--colors
は、VS Codeが色をサポートしていることを検出しなくても、Mochaが色を出力するようにします。
別の方法は、mochaの--debug-brk
コマンドラインオプションと、Visual Studio CodeデバッガーのデフォルトのAttach
起動設定を使用することです。
より深い説明の提案(Andréから)
これをする:
次のコマンドを使用して、コマンドラインからmochaを実行します。
mocha --debug-brk
VS Codeで[デバッグ]アイコンをクリックし、[開始]ボタンの横にあるオプションから[Attach
]を選択します。 VS Codeにブレークポイントを追加し、[開始]をクリックします。
OS X 10.10のVSCodeでこの作業を行いました。 ./settings/launch.json
ファイルをこれに置き換えてください。
{
"version": "0.1.0",
"configurations": [
{
"name": "Run app.js",
"type": "node",
"program": "app.js", // Assuming this is your main app file.
"stopOnEntry": false,
"args": [],
"cwd": ".",
"runtimeExecutable": null,
"env": { "NODE_ENV": "production"}
},
{
"name": "Run mocha",
"type": "node",
"program": "/Users/myname/myfolder/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"args": ["test/unit.js"],
"cwd": ".",
"runtimeExecutable": null,
"env": { "NODE_ENV": "production"}
}
]
}
Gist here としても利用可能です。
変更する必要があるキーの値は、program
(_mocha
実行可能ファイルに設定する必要があります)とargs
(テストファイルの配列にする必要があります)です。
Mac OS XでVS Code(1.8.2)で動作させる方法は次のとおりです。
{
"name": "Mocha",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"args": ["--recursive"], //you can specify paths to specific tests here
"cwd": "${workspaceRoot}",
"runtimeExecutable": null,
"env": {
"NODE_ENV": "testing"
}
}
Mochaはnpm modulesディレクトリにインストールする必要があります。
Debug > Add Configuration...
メニューに移動しますNode.js
環境を選択しますMocha Tests
オプションを選択しますargs
プロパティの最後の項目としてテストファイルのパスを入力しますbreakpoint
を追加しますDebug
アイコンをクリックしますMocha Tests
を選択しますStart debugging
ボタンを押します回避策として分類するこれを行う方法を見つけました。私は、Visual Studio Codeチームがこれに対してより確実なソリューションを提供することを期待していますが、その間、私がやったことは:
./settings/mocha.js
ファイルを作成しました。完全なファイルを見ることができます here ;./settings/mocha.js
をprogram
として実行し、テストに必要なファイル/ファイルパターンを引数として渡す起動構成を作成しました。
{
"name": "Unit tests",
"type": "node",
"program": ".settings/mocha.js",
"stopOnEntry": true,
"args": ["test/unit/*.js", "test/unit/**/*.js"],
"cwd": ".",
"runtimeExecutable": null,
"env": { }
}
したがって、これはmocha test/unit/*.js test/unit/**/*.js
を実行することと同等であり、モカテストでブレークポイントを使用できるようになりました。
Argsリストの最後に$ {file}変数を追加すると、開いているファイルから直接デバッグを開始できます。
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"${file}"
],
"internalConsoleOptions": "openOnSessionStart"
}
launch.jsonで、さらに1つの設定を追加します
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"args": [
"--timeout",
"10000",
"${workspaceRoot}/services/*.spec.js",
"${workspaceRoot}/*.spec.js"
],
"internalConsoleOptions": "openOnSessionStart"
},
ノードのバージョンを設定する必要がある場合は、次のようにruntimeExecutable
フィールドを追加するだけです
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"args": [
"--timeout",
"10000",
"${workspaceRoot}/services/*.spec.js",
"${workspaceRoot}/*.spec.js"
],
"internalConsoleOptions": "openOnSessionStart",
"runtimeExecutable": "${env:HOME}/.nvm/versions/node/v8.2.1/bin/node"
},
さらに別の答えを追加してすみませんが、VS Code 1.8.1およびそれに含まれる標準のNodeデバッガの時点で、以前のものはまったく機能しませんでした。ここに私がそれを解決した方法があります(以前の回答からのガイダンスと公式の VS Code Node.jsデバッグ docsから)ので、ワンクリック/キープレスのデバッグがあります:
packages.json
のdevDependency
としてインストールされていることを確認します:"devDependencies": { "mocha": "^3.2", ... }
npm install
のディレクトリでpackage.json
を実行して、node_modules/
にmochaがインストールされていることを確認します.vscode/launch.json
を開きます(またはVS CodeでF1を押し、「launch」と入力し始め、「Debug:Open launch.json」を選択します)launch.json
で以下を変更し、VS Codeのデバッグウィンドウで新しい構成名を選択し、緑色の矢印をクリックして、ノード+モカテストのデバッグを開始します。launch.json:
の新しい設定で
"configurations": [{
"name": "whatever name you want to show in the VS Code debug list",
"type": "node",
"cwd": "${workspaceRoot}",
"program": "${workspaceRoot}/node_modules/mocha/bin/mocha",
"args": ["--debug-brk=5858", "--no-timeouts", "--colors", "test/**/*.js"],
"address": "localhost",
"port": 5858,
// the other default properties that are created for you are fine as-is
}, ...]
これは、テストを配置した場所に対してtest/**/*.js
パターンが機能すると想定しています。必要に応じて変更します。
args
プロパティとport
プロパティの両方でポートを変更する限り、ポートを自由に変更できます。
私にとっての主な違いは、mochaがnode_modules
にあることを確認し、program
を使用して実行可能ファイルをポイントし、args
がdebug-brk=x
を使用してport
。上記の残りの部分は、物事をより美しく簡単にするだけです。
.vscode/launch.json
をリポジトリに置くかどうかは、あなたとあなたのチーム次第です。これはIDE専用のファイルですが、すべてのパスとインストールは相対的で明示的であるため、チーム全体で問題なく使用できます。
ヒント:package.json
には、"test": "./node_modules/.bin/mocha"
などのモカを起動するscripts
タグを含めることができますが、VS Codeでは使用されません。代わりに、npm test
が使用される場合に使用されますコマンドラインで実行します。これは私を少し混乱させました。他の人が混乱する場合に備えて、ここで注意してください。
編集:VS Code 1.9.0では、デバッグ構成のドロップダウンに「構成の追加」オプションが追加され、上記のほとんどを簡素化するのに役立つ「Node.js Mocha Tests」を選択できます。 mochaがnode_modules
にあることを確認し、cwd
と最後のruntimeArgs
(テストを見つけるためのパターン)を更新して適切なパスを指すようにする必要があります。ただし、これらの2つのプロパティを設定すると、そこからほとんど機能するはずです。
Babelを使用する場合、またはソースにブレークポイントを配置しながらJavaScriptファイルを生成する場合は、sourceMaps
を有効にし、outFiles
を定義する必要があります。ここに私のために働いた設定例があります。
{
"name": "Mocha Test",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/packages/api/node_modules/mocha/bin/_mocha",
"cwd": "${workspaceRoot}/packages/api",
"args": ["--colors", "--no-timeouts", "out/test"],
"outFiles": ["${workspaceRoot}/packages/api/out/*"],
"sourceMaps": true,
},
注-outFiles
を変更して、ブレークポイントを追加する可能性のあるすべてのものを含める必要があります。 monorepoおよび複数の依存プロジェクトの場合、これはより退屈です。
これは、Windows 7マシンで動作します。私はmochaをグローバルにインストールしていますが、この構成はプロジェクトのインストールを指しており、ユーザープロファイルパスの必要性を回避しています(ところで、%USERPROFILE%変数を使用しようとしましたが成功しませんでした)。モカテストでブレークポイントを設定できるようになりました。わーい!
{
"name": "Mocha Tests",
"type": "node",
"request": "launch",
"stopOnEntry": false,
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"cwd": "${workspaceRoot}",
"args": ["./test/**/*.js"],
"runtimeExecutable": null,
"envFile": "${workspaceRoot}/.env"
}
Gruntまたはgulpを使用している場合、構成は非常に簡単です。
Launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Run mocha by grunt",
"type": "node",
"program": "${workspaceRoot}/node_modules/grunt/bin/grunt",
"stopOnEntry": false,
"args": ["mochaTest"],
"cwd": "${workspaceRoot}",
"runtimeExecutable": null
}
]}
Gruntfile.js
module.exports = function (grunt) {
grunt.initConfig({
mochaTest: {
test: {
options: {
reporter: 'spec'
},
src: ['test/**/*test.js']
}
}
});
grunt.loadNpmTasks('grunt-mocha-test');
grunt.registerTask('default', 'mochaTest');};
VSCodeバージョン1.13.0(macOS)では、構成-> Mocha Tests
に組み込まれています。
Windowsを使用している人向け。 mochaをグローバルにインストールした場合、プログラムを次のパスに設定するとうまくいきました(ユーザー名を交換してください)。
"program": "C:\\Users\\myname\\AppData\\Roaming\\npm\\node_modules\\mocha\\bin\\_mocha"
TypeScriptを使用する場合、Visual Studio Code 0.8.0(tsc 1.5.3)で次の構成が機能します。
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "build",
"declaration": false
},
"files": [
"./src/index.ts",
"./src/test/appTests.ts"
]
}
ここで注意すべき重要な点は、ソースマップが生成され、jsの出力ディレクトリがbuild
に設定されることです。
launch.json
{
"name": "Attach",
"type": "node",
// TCP/IP address. Default is "localhost".
"address": "localhost",
// Port to attach to.
"port": 5858,
"sourceMaps": true,
"outDir": "build"
}
sourceMaps
はtrue
に設定され、outDir
はbuild
に設定されていることに注意してください。
デバッグするため
index.ts
にインポートされた他のTypeScriptファイルにブレークポイントを固定するmocha --debug-brk ./build/test/appTests.js
テストに依存関係がある場合は、簡単に添付することもできます。
たとえば、mongo-unit-helper
を使用して、データベースと統合された単体テストも持っています。
package.json
スクリプト:mocha --recursive --require ./test/mongo-unit-helper.js --exit"
私のlaunch.json
は次のようになります。
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"--recursive",
"--require",
"${workspaceFolder}/test/mongo-unit-helper.js",
"${workspaceFolder}/test/**/*.js",
],
"internalConsoleOptions": "openOnSessionStart"
}
]
解決策は、--require
内のargs
にlaunch.json
を個別に配置することです。
以下は、Microsoftの launch configuration(launch.json) の例です。Mochaで動作し、デバッガーを使用できます。
また、--debug-brkオプションの使用方法の 説明 があります。
最後に、 Mochaテストでコードをデバッグする方法の代替バージョン VS CodeおよびGulpタスクランナーのtasks.jsonファイルを使用します。
1)に行く
.vscode
それから
launch.json
ファイル
2)launch.jsonに次の構成を追加します-
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Mocha Test",
"cwd": "${workspaceRoot}",
"runtimeExecutable": "${workspaceRoot}/*folder_path_containing_test*/node_modules/.bin/mocha",
"windows": {
"runtimeExecutable": "${workspaceRoot}/*folder_path_containing_test*/node_modules/.bin/mocha.cmd"
},
"runtimeArgs": [
"--colors",
"--recursive",
"${workspaceRoot}/*folder_path_till_test*/tests"
],
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceRoot}/*folder_path_to_test*/app.js"
}
]
}
3)テストファイルにブレークポイントを設定し、F5
を押します