Visual Studio Code kullanarak Mocha kesme noktaları


101

Visual Studio Code kullanarak Mocha testlerine kesme noktaları eklemek mümkün müdür?

Normalde kodda hata ayıklama yapılırken launch.json'u yapılandırmak ve program özniteliğini yürütülecek javascript dosyasına ayarlamak gerekir. Yine de bunu Mocha için nasıl yapacağımdan emin değilim.

Yanıtlar:


83

Başlatma yapılandırmanıza girip, imlecinizi diğer yapılandırmalarınızın arkasına veya arasına koyduğunuzu ve otomatik olarak oluşturulan güncel, geçerli bir mocha yapılandırmasını almak için ctrl- tuşuna bastığınızı biliyor muydunuz space?

Benim için gayet iyi çalışıyor. Kesme noktalarında durma dahil. (Ayrıca, çeşitli ayarlarla ilgili nedenlerden dolayı artık kullanılmayan eski, şimdi modası geçmiş bir tane de vardı.)

görüntü açıklamasını buraya girin

VSCode 1.21.1 (Mart 2018) itibarıyla bu, şunları sağlar:

{
  "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
    }
}

Bir yandan not olarak: debug-brk kullanımdan kaldırıldı (en azından Düğüm> = Sürüm 8'e sahip olan herkes için).


2
Belgeyi başlatmak ve Sıcak Modül Değiştirmeyi devre dışı bırakmak için bazı özel kodlara ihtiyacım vardı. Bu tartışmayı "args"blokta "--require", "${workspaceFolder}/tools/testSetup.js",
Kent Bull

1
VS Code 1.29.1: Otomatik olarak oluşturulmuş Ctrl+SpaceMocha Tests yapılandırmasında yoktu debug-brk. Buna rağmen kesme noktaları ile hata ayıklama gayet iyi çalıştı.
Antony

@Antony Evet, uzun debug-brksüre kullanılmasına, desteklenmesine veya otomatik olarak eklenmesine gerek yoktur. Benim yan not birden diğer cevaplar söz olarak sadece bu açıklık.
Frank Nocke

1
ctrl + spaceÇalışmak için (yalnızca) diğer yapılandırmamın sağ ayraçından sonra bir virgül eklemek zorunda kaldım .
GOTO

2
Mocha için uygun konfigürasyonun güncel bir örneği için bkz: github.com/Microsoft/vscode-recipes/tree/master/…
Nux

70

--debug-brk+ Attach'ı kullanmak istemiyorsanız veya global mocha kurulumunuza mutlak bir yol belirtmek istemiyorsanız (launch.json'unuzu sürüm kontrolü altında tutarsanız ve farklı makinelerde birden fazla geliştiriciniz varsa fren yapar), mocha'yı dev bağımlılığı olarak kurun ve Bunu launch.json'unuza ekleyin:

{
  "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"
  }
}

Sadece F5'e basarak testlerinizde tam hata ayıklama desteği.

--no-timeoutsbir kesme noktasında durduğunuz için testlerinizin zaman aşımına uğramamasını sağlar ve --colorsMocha'nın VS Code'un renkleri desteklediğini algılamasa bile renkleri çıktısını almasını sağlar.


12
Başkaları sorun yaşayanlar için. Mocha'ya değil _mocha'ya dikkat edin. Sadece mocha ile testleri VS kodunda çalıştıracak ancak kesme noktaları
tutturulmayacak

1
TypeScript kullananlar için, belirlediğiniz sürece bu uygun bir cevaptır sourceMaps: true. Bir milyar teşekkürler!
Bryan Rayner

Npm uyumlu özel test parametrelerinizi eklemek npm_config_myparamiçin, env bloğuna benzer bir şey ekleyin . CLI'nin neresinde gibi görünebilir npm --myparam=myvalue test.
bvj

44

Başka bir yol da --debug-brkmocha komut satırı seçeneğini ve AttachVisual Studio Code hata ayıklayıcısının varsayılan başlatma ayarını kullanmaktır.


Önerilen daha derin açıklama (André'den)

Bunu yapmak için:

Bu komutu kullanarak komut satırından mocha'yı çalıştırın:

mocha --debug-brk

Şimdi VS Code'da Debug simgesine tıklayın, ardından Attachbaşlat düğmesinin yanındaki seçenekten seçim yapın. VS Code'da kesme noktaları ekleyin ve ardından başlat'ı tıklayın.


1
Bu çok daha kolay, neredeyse hiç konfigürasyon yok
André Vermeulen

"request": "attach"Mevcut değilse launch.json'a eklemelisiniz - aksi takdirde bir program veya başka bir hata belirtmeniz gerektiğinden şikayet eder.
jocull

Bu VS Codebelirli görünüyor . Normal VS 2015'te çalışmıyor
Pavel P

harika tavsiye Teşekkürler :)
Gaurav Rawat

1
Not --debug-brkedilir günümüzde kullanımdan kaldırıldı Önerim yüzden, otomatik yaratma vscode bir taze ayıklama yapılandırma , evet, alslo özellikle mocha.
Frank Nocke

24

Bu çalışmayı OS X 10.10'da VSCode üzerinde yaptım. ./settings/launch.jsonDosyanızı bununla değiştirin .

{
    "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"}
        }
    ]
}

Aynı zamanda bir ana fikri olarak kullanılabilir burada .

Değiştirmeniz gereken anahtar değerler program, _mochaçalıştırılabilir olarak ayarlanması gereken ve argstest dosyalarınızın bir dizisi olması gereken değerlerdir.


Benim için çalışmıyor (Windows'ta) - ama işe yararsa iyi bir çözüm gibi görünüyor :)
Wolfgang Kluge

Evet. Üzgünüm OpenDebug process has terminated unexpectedly
Wolfgang Kluge

Eğer ayarlamayı deneyin Can "runtimeExecutable"için "C:/Program Files/nodejs/node.exe"Düğüm yüklü yerde ya?
GPX

Elbette - ama değişiklik yok.
Wolfgang Kluge

Windows kullanmıyorum, bu yüzden daha fazla yardımcı olamam. Ancak, göz kulak bu - bu OpenDebug konuda bahsediyoruz.
GPX

11

Mac OS X'te VS Code (1.8.2) üzerinde çalışma şeklim:

{
    "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'nın npm modülleri dizinine yüklenmesi gerekiyor.


Bu beni asırlardır sıkıştı. Node_modules yerine "hangi mocha" dan gelen yolu yanlış kullandım. Teşekkürler!
PMac

11
  1. Debug > Add Configuration...Menüye git
  2. Node.jsOrtamı seçin
  3. Mocha TestsAçılan listeden seçeneği seçin
  4. argsÖzelliğin son öğesi olarak test dosyanızın yolunu yazın
  5. Ekle breakpoint
  6. DebugSimgeye tıklayın
  7. Mocha TestsYapılandırma olarak seçin
  8. Basın Start debuggingdüğmesi
  9. :-)

6

Bunu yapmanın bir yolunu buldum ve bunu geçici çözüm olarak sınıflandırıyorum . Visual Studio Code ekibinin bunun için daha kesin bir çözüm sağlamasını bekliyorum, ancak bu arada bunu yaptım:

  1. ./settings/mocha.jsÇalıştırılacak dosyaların bir listesi olarak argümanları programlı olarak geçiren mocha'yı çalıştıran bir dosya oluşturdum . Dosyanın tamamını burada görebilirsiniz ;
  2. ./settings/mocha.jsBağımsız programdeğişken olarak test etmemiz gereken dosyaları / dosya kalıplarını çalıştıran ve geçiren bir başlatma yapılandırması oluşturdum :

    {
        "name": "Unit tests",
        "type": "node",
        "program": ".settings/mocha.js",
        "stopOnEntry": true,
        "args": ["test/unit/*.js", "test/unit/**/*.js"],
        "cwd": ".",
        "runtimeExecutable": null,
        "env": { }
    }

    Tam launch.json örneği

Yani bu, yapmakla eşdeğerdir mocha test/unit/*.js test/unit/**/*.jsve artık mocha testlerimizde kesme noktaları kullanabiliriz.


Benim için çalışmıyor, test dosyalarını bulamıyor, yollar doğru, tam yollarla da denedim.
Simone Gianni

1
Bu benim için de 0.10.6 vscode için çalışıyor. .Ts dosyalarındaki kesme noktaları ile kaynak haritalarıyla 'sourceMaps': true, 'outDir': './build'başlatma yapılandırmama ekledim .
pyrho

4

Args listesinin sonuna $ {file} değişken eklerseniz, hata ayıklamaya doğrudan açmış olduğunuz dosyadan başlayabilirsiniz:

        {
            "type": "node",
            "request": "launch",
            "name": "Mocha Tests",
            "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
            "args": [
                "-u",
                "tdd",
                "--timeout",
                "999999",
                "--colors",
                "${file}"
            ],
            "internalConsoleOptions": "openOnSessionStart"
        }

2

Başka bir cevap eklediğim için özür dilerim, ancak önceki cevaplardan hiçbiri VS Code 1.8.1 ve standart Node hata ayıklayıcıdan itibaren benim için pek işe yaramadı. İşte onu çözme şeklim (buradaki önceki cevaplardan ve resmi VS Code Node.js Hata Ayıklama belgelerinden rehberlik ederek ), böylece tek tıklama / tuşa basma hata ayıklaması var:

  • Mocha'nın devDependencyin packages.json:"devDependencies": { "mocha": "^3.2", ... }
  • Mocha'nın şimdi kurulu olduğundan emin olmak npm installiçin dizininizde çalıştırın package.json.node_modules/
  • Açık .vscode/launch.json (veya VS Code'da F1 tuşuna basın, "launch" yazmaya başlayın ve "Debug: Open launch.json" öğesini seçin)
  • Sağ alttaki mavi "Yapılandırma Ekle" düğmesini tıklayın (veya diğerlerinden birini kopyalayıp yapıştırın); bu adım isteğe bağlıdır ... Yani, mevcut bir yapılandırmayı yeniden kullanabilirsiniz. Ancak daha az kafa karıştırıcı olması için bir tane eklemenizi öneririm.
  • Aşağıdakileri kendi içinde değiştirin launch.json, ardından VS Code'daki hata ayıklama penceresinden yeni yapılandırma adını seçin ve düğüm + mocha testlerinizde hata ayıklamaya başlamak için yeşil oku tıklayın!

Yeni yapılandırmada 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
}, ...]

Bu, modelin test/**/*.jstestlerinizi koyduğunuz yer için çalışacağını varsayar . Uygun şekilde değiştirin.

Eğer her ikisinde de değiştirene uzun olduğunca bağlantı noktasını değiştirmek için çekinmeyin argsve portmaç için özellikleri.

Benim için önemli farklılıklar emin mocha oldu yapıyordu node_moduleskullanarak, programyürütülebilir noktasına ve argsgerek debug-brk=xbelirtilen bağlantı noktasına işaret port. Yukarıdakilerin geri kalanı işleri daha güzel ve daha kolay hale getirir.

.vscode/launch.jsonDepoya koyup koymamanız size ve ekibinize bağlıdır . Bu yalnızca bir IDE dosyasıdır, ancak tüm ekibiniz onu bu şekilde kullanabilir, sorun değil, çünkü tüm yollar ve yüklemeler göreli ve açık.

İpucu: Mocha'yı da benzer bir şeyle başlatan package.jsonbir scriptsetiket içerebilir "test": "./node_modules/.bin/mocha", ancak VS Code tarafından kullanılmaz - bunun yerine npm testkomut satırında çalıştırıldığında kullanılır . Bu biraz kafamı karıştırdı. Başkalarının da kafasının karışması durumunda buraya not ederek.

DÜZENLEME: VS Code 1.9.0, hata ayıklama yapılandırması açılır menüsünde bir "Yapılandırma Ekle" seçeneği ekledi ve yukarıdakilerin çoğunu basitleştirmeye yardımcı olan "Node.js Mocha Testleri" ni seçebilirsiniz. Yine de mocha'nın sizin için olduğundan emin olmanız gerekir ve uygun yolları işaret etmek için ve sonunu (testlerinizi bulmak için kullanılan modeldir) node_modulesgüncellemeniz gerekebilir . Ancak bu iki özelliği bir kez ayarladığınızda, hemen hemen oradan çalışması gerekir.cwdruntimeArgs


2

launch.json'da aşağıya 1 yapılandırma daha ekleyin

{
      "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"
    },

Düğüm sürümünü yapılandırmanız gerekiyorsa, runtimeExecutablebunun gibi bir alan eklemeniz yeterlidir

{
      "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"
    },

2

1) Git

.vscode

sonra

launch.json

dosya

2) launch.json içine aşağıdaki yapılandırmayı ekleyin -

{
    "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) Test dosyasında kesme noktalarını ayarlayın ve ardından F5


1

Windows kullanan herkes için. Mocha'yı global olarak kurduysanız, programı aşağıdaki yola ayarlamak benim için çalıştı (kullanıcı adınızı değiştirin).

"program": "C:\\Users\\myname\\AppData\\Roaming\\npm\\node_modules\\mocha\\bin\\_mocha"

1

Bu benim için bir Windows 7 makinesinde çalışıyor. Global olarak mocha yükledim, ancak bu yapılandırma bir kullanıcı profili yoluna ihtiyaç duymamak için proje kurulumuna işaret ediyor (ki btw,% USERPROFILE% değişkenini başarıyla kullanmayı denedim). Şimdi mocha testlerimde kesme noktaları belirleyebiliyorum. Yaşasın!

{
        "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"
    }

1

Grunt veya gulp kullananlar için konfigürasyon oldukça basit.

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');};

1

VSCode sürüm 1.13.0'da (macOS), yapılandırmalar altında yerleşiktir -> Mocha Tests.


Windows'ta aynı.
sfratini

1

Babel kullanırken veya javascript dosyaları oluştururken ancak kaynağa kesme noktaları yerleştirirken - etkinleştirdiğinizden sourceMapsve tanımladığınızdan emin olmalısınız outFiles. İşte benim için çalışan bir yapılandırma örneği.

    {
        "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,
    },

Not - outFilesBir kesme noktası eklemek isteyebileceğiniz her şeyi dahil etmek için değiştirmeniz gerekecektir . Bu, bir monorepo ve birden çok bağımlı projede olduğunda daha sıkıcı olabilir.


0

TypeScript kullanırken, aşağıdaki yapılandırma benim için Visual Studio Code 0.8.0'da çalışır (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"
    ]
}

Burada dikkat edilmesi gereken önemli husus, kaynak haritalarının oluşturulması ve js için çıktı dizininin şu şekilde ayarlanmasıdır: 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"
    }

Lütfen bunun sourceMapsolarak trueve olarak ayarlandığını unutmayın outDir.build

hata ayıklamak

  1. Kesme noktalarını index.tsdiğer içe aktarılan yazı tipi dosyalarına yapıştırın
  2. Bir terminal açın ve çalıştırın: mocha --debug-brk ./build/test/appTests.js
  3. VSC'den, 'Ekle' başlatma yapılandırmasını çalıştırın


0

Testte bir miktar bağımlılığınız varsa, onu takmak da kolaydır.

Örneğin, mongo-unit-helperVeritabanı ile entegre birim testlerine sahip olmak için kullanıyorum .

package.json komut dosyası: mocha --recursive --require ./test/mongo-unit-helper.js --exit"

Benim launch.jsongörünüyor gibi:

  "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"
 }
]

Çözüm, --requireayrı olarak argsyerleştirmektir launch.json.


0

En basit çözüm

Aşağıdaki kodu .vscode klasörünün içindeki launch.json'a ekleyin:

{
            "name": "Unit tests",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
            "args": [
            ],
        }

Bununla birlikte, bir zaman aşımı bağımsız değişkeni de eklemek isteyebilirsiniz:

 {
            "name": "Unit tests",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
            "args": [
                "--timeout",
                "999999"
            ],
        }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.