2016-12-30 96 views
4

我正在使用Mocha(和Chai)進行NodeJS模塊的單元測試,並且希望在Visual Studio代碼中對其進行調試。我在test子文件夾中有一個TypeScript文件,並進行了一些測試。 VScode在out目錄中生成.js和.map文件(通過tsc watch模式任務)。我的tsconfig.json文件包含以下設置:在調試摩卡測試時未命中Visual Studio代碼中的斷點

{ 
    "compilerOptions": { 
     "compileOnSave": true, 
     "module": "commonjs", 
     "target": "es6", 
     "outDir": "out", 
     "removeComments": true, 
     "noImplicitAny": true, 
     "sourceMap": true, 
     "inlineSources": true, 
     "isolatedModules": false, 
     "allowSyntheticDefaultImports": true, 
     "experimentalDecorators": true 
    }, 
    "include": [ 
     "src/**/*", "parser/**/*", "test/**/*" 
    ], 
    "exclude": [ 
     "node_modules", 
     ".vscode-test" 
    ] 
} 

和out dir包含3個包含的子目錄。迄今爲止都很好。

我可以使用這個命令來運行我的測試:

mocha --compilers ts:ts-node/register,tsx:ts-node/register 

外vscode的。然後我用--debug-brk開關運行此代碼並將vscode附加到它。這有效,但沒有斷點。在launch.json該配置是:

{ 
     "name": "Attach", 
     "type": "node", 
     "request": "attach", 
     "port": 5858, 
     "address": "localhost", 
     "restart": false, 
     "sourceMaps": true, 
     "outDir": null, 
     "localRoot": "${workspaceRoot}", 
     "remoteRoot": null 
    } 

理想情況下,我想有一個運行配置,這樣我就不需要手動運行摩卡。有了這些設置,我至少可以運行測試:

{ 
     "name": "Mocha", 
     "type": "node", 
     "request": "launch", 
     "cwd": "${workspaceRoot}", 
     "preLaunchTask": "tsc", 
     "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", 
     "args": [ "--no-timeouts", "--colors", "${workspaceRoot}/out/test/**/*.js" ], 
     "stopOnEntry": true, 
     "runtimeExecutable": null, 
     "env": { 
      "NODE_ENV": "testing" 
     } 
     "sourceMaps": true 
    } 

但仍然沒有斷點。

需要什麼才能使兩個方案中的至少一個工作?

更新:同時,我也發現偶然的斷點開始當你在測試代碼的某個位置添加一個debugger;命令並至少設置一個斷點清新它debugger;停止後工作。之後,此單個文件中的所有後續斷點都按預期工作。看起來幾乎像是一個bug。

+0

我在同一條船上。在執行斷點的行時,在測試文件或帶有斷點的文件中添加'調試器'不會停止執行。假設這是一個錯誤,誰會擁有它? – givanse

+0

也許不是一個bug,我構建了一個最小的測試用例,它的工作原理如下:/ https://github.com/givanse/vscode-debug-mocha-tests一些其他的配置文件或依賴項必須弄亂事情。 – givanse

+0

那麼,你寫了一個JS測試,而我正在使用Typescript。這可能是這個問題的一部分。 –

回答

1

在啓動選項中使用"protocol": "inspector",幫助我繼續了一段時間,即使這具有令人討厭的副作用,即測試過程在所有內容執行後都沒有停止過。每次運行後我都必須完成任務。所以我雖然我會再次嘗試找到問題,我成功了。解決方案很簡單:將outfiles選項添加到啓動選項,否則vscode將在TS源文件夾中查找映射。加入:

 "outFiles": [ 
      "${workspaceRoot}/out/**/*.js" 
     ], 

一切都開始很好地工作。如果vscode會因爲缺少設置而打印出無法找到源映射的警告,它會非常有用。

相關問題