2017-03-25 68 views
5

我編寫了一個Typescript庫。單元測試也使用Mocha框架編寫在Typescript中。我想直接執行單元測試而不編譯成javascript。 這適用於以下命令:如何在VisualScript中使用Mocha調試用Mocha編寫的單元測試代碼

./node_modules/mocha/bin/mocha ./test/*.test.ts --require ts-node/register 

我嘗試從Visual Studio代碼與下面的啓動設置調試單元測試:

{ 
    "type": "node", 
    "request": "launch", 
    "name": "Mocha Tests", 
    "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", 
    "args": [ 
     "--require", 
     "ts-node/register", 
     "${workspaceRoot}/test/*.test.ts" 
    ], 
    "internalConsoleOptions": "openOnSessionStart" 
} 

這樣我可以從VS代碼調試摩卡本身,而是不是單元測試。摩卡爲測試生成單獨的進程,並且調試器不能自動附加到子進程。

從Visual Studio代碼調試Typescript單元測試的正確方法是什麼?

回答

0

TL;博士:使用Nodejs debugger command


我發現我的問題的解決方案/解決辦法,雖然我很滿意它不是100%。

通過將--require ts-node/register切換到Mocha,我們基本上將ts-node/register.js庫注入我們的測試環境。這個庫包裝需要調用,並且當加載.ts文件時,它會按需編譯打字稿代碼。

爲了測試ts-node/register是如何工作的,我寫了一個沒有Mocha的簡單Nodejs例子。示例中有一個debug_test.js文件和一個debug_test.ts文件。我開始debug_test.js,它加載debug_test.ts

我從Vissual Studio Code的一個簡單的'Node.js:Launch Program'配置開始這個例子。

enter image description here

當我把一個斷點debug_test.ts:2的問題是相同的,以我原來的問題 - 它不會破壞。

enter image description here

但是,如果我用的NodeJS debugger命令它打破了,我可以調試應用程序。

當我在debugger命令上放置一個斷點時,Visual Studio Code識別出調用堆棧,但調試控制檯可用,但我在UI上看不到該局部變量。

enter image description here

這似乎是一個VS代碼錯誤或改進的機會,但現在這個解決方案可與摩卡與我原來的啓動配置了。

2

如果有人發現它是有用的,下面launch.json配置片段爲我工作,沒有任何解決方法:

{ 
    "name": "mocha tests", 
    "type": "node", 
    "protocol" : "inspector", 
    "request": "launch", 
    "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", 
    "stopOnEntry": false, 
    "args": [ "--compilers", "ts:ts-node/register", "--no-timeouts", "${relativeFile}"], 
    "cwd": "${workspaceRoot}" 
    } 

工作正常,我有node v7.10.0tsc 2.4.0和Visual Studio代碼1.13.1。 mochatsc都在本地安裝在node_modules之下。

相關問題