Testování částí v JavaScriptu a TypeScriptu v sadě Visual Studio

Testy jednotek můžete psát a spouštět v sadě Visual Studio pomocí některých oblíbených architektur JavaScriptu, aniž byste museli přepnout na příkazový řádek. Podporují se projekty Node.js i ASP.NET Core.

Podporované architektury jsou:

Pokud vaše oblíbená architektura není podporovaná, přečtěte si téma Přidání podpory pro architekturu testování jednotek s informacemi o přidání podpory.

Zápis testů jednotek pro projekt založený na rozhraní příkazového řádku (.esproj)

Projekty založené na rozhraní příkazového řádku podporované v sadě Visual Studio 2022 pracují s Průzkumníkem testů. Jest je integrovaná testovací architektura pro projekty React a Vue a Karma a Jasmine se používají pro projekty Angular. Ve výchozím nastavení budete moct spouštět výchozí testy poskytované jednotlivými architekturami a také všechny další testy, které napíšete. Stačí stisknout tlačítko Spustit v Průzkumníku testů. Pokud průzkumníka testů ještě nemáte otevřený, najdete ho tak, že v řádku nabídek vyberete Průzkumníka testů>.

Pokud chcete spustit testy jednotek z příkazového řádku, klikněte pravým tlačítkem na projekt v Průzkumník řešení, zvolte Otevřít v terminálu a spusťte příkaz specifický pro typ testu.

Informace o nastavení testů jednotek najdete v následujících tématech:

Tady je také uveden jednoduchý příklad. K úplným informacím však použijte předchozí odkazy.

Přidání testu jednotek (.esproj)

Následující příklad je založený na šabloně projektu TypeScript React poskytované v sadě Visual Studio 2022 verze 17.8 nebo novější, což je samostatná šablona projektu TypeScript React. U Vue a Angular jsou kroky podobné.

  1. V Průzkumník řešení klikněte pravým tlačítkem myši na projekt React a zvolte Upravit soubor projektu.

  2. Ujistěte se, že se v souboru .esproj nacházejí následující vlastnosti se zobrazenými hodnotami.

    <PropertyGroup>
      <JavaScriptTestRoot>src\</JavaScriptTestRoot>
      <JavaScriptTestFramework>Jest</JavaScriptTestFramework>
    </PropertyGroup> 
    

    Tento příklad určuje Jako testovací architekturu Jest. Místo toho můžete zadat Mocha, Tape nebo Jasmine.

    Element JavaScriptTestRoot určuje, že testy jednotek budou ve složce src kořenového adresáře projektu.

  3. V Průzkumník řešení klikněte pravým tlačítkem na uzel npm a zvolte Nainstalovat nové balíčky npm.

    Pomocí dialogového okna instalace balíčku npm nainstalujte následující balíčky npm:

    • jest
    • jest-editor-support

    Tyto balíčky se přidají do souboru package.json v rámci závislostí.

  4. V souboru package.json přidejte test oddíl na konec oddílu scripts :

    "scripts": {
       ...
       "test": "jest"
    },
    
  5. V Průzkumník řešení klikněte pravým tlačítkem na složku src a zvolte Přidat>novou položku a pak přidejte nový soubor s názvem App.test.tsx.

    Tím se nový soubor přidá do složky src.

  6. Do souboru App.test.tsx přidejte následující kód.

    describe('testAsuite', () => {
       it('testA1', async () => {
          expect(2).toBe(2);
       });
    });
    
  7. Otevřete Průzkumníka testů (zvolte >Průzkumník testů) a Visual Studio vyhledá a zobrazí testy. Pokud se testy nezobrazují na začátku, znovu sestavte projekt a aktualizujte seznam.

    Screenshot of Test Explorer test discovery (.esproj).

    Poznámka:

    Pro TypeScript nepoužívejte outfile možnost v souboru tsconfig.json, protože Průzkumník testů nebude moct najít testy jednotek. Tuto možnost můžete použít outdir , ale ujistěte se, že jsou konfigurační soubory, jako package.json jsou a tsconfig.json jsou v kořenovém adresáři projektu.

Spouštění testů (.esproj)

Testy můžete spustit kliknutím na odkaz Spustit vše v Průzkumníku testů. Nebo můžete testy spustit tak, že vyberete jeden nebo více testů nebo skupin, kliknete pravým tlačítkem myši a v místní nabídce vyberete Spustit . Testy běží na pozadí a Průzkumník testů se automaticky aktualizuje a zobrazí výsledky. Vybrané testy můžete také ladit tak, že kliknete pravým tlačítkem myši a vyberete Ladit.

Následující obrázek ukazuje příklad s přidaným druhým testem jednotek.

Screenshot of Test Explorer results (.esproj).

U některých architektur testů jednotek se testy jednotek obvykle spouštějí proti vygenerovanému kódu JavaScriptu.

Poznámka:

Ve většině scénářů TypeScriptu můžete ladit test jednotek nastavením zarážky v kódu TypeScriptu, kliknutím pravým tlačítkem myši na test v Průzkumníku testů a zvolením Ladit. Ve složitějších scénářích, například v některých scénářích, které používají zdrojové mapy, může být obtížné narazit na zarážky v kódu TypeScriptu. Jako alternativní řešení zkuste použít debugger klíčové slovo.

Poznámka:

Testy profilace a pokrytí kódu se v současné době nepodporují.

Zápis testů jednotek pro ASP.NET Core

Pokud chcete přidat podporu pro testování částí JavaScriptu a TypeScriptu v projektu ASP.NET Core, musíte do projektu přidat podporu TypeScriptu, Npm a testování jednotek zahrnutím požadovaných balíčků NuGet.

Přidání testu jednotek (ASP.NET Core)

Následující příklad je založený na šabloně projektu ASP.NET Core Model-View-Controller a zahrnuje přidání testu jednotek Jest nebo Mocha.

  1. Vytvořte projekt ASP.NET Core Model-View-Controller.

    Příklad projektu najdete v tématu Přidání TypeScriptu do existující aplikace ASP.NET Core. Pro podporu testování jednotek doporučujeme začít se standardní šablonou projektu ASP.NET Core.

  2. V Průzkumník řešení (pravé podokno) klikněte pravým tlačítkem na uzel projektu ASP.NET Core a vyberte Spravovat balíčky NuGet pro řešení.

  3. Na kartě Procházet vyhledejte následující balíčky a nainstalujte je:

    Balíček NuGet použijte k přidání podpory TypeScriptu místo balíčku npm TypeScript.

  4. V Průzkumník řešení klikněte pravým tlačítkem myši na uzel projektu a zvolte Upravit soubor projektu.

    Soubor .csproj se otevře v sadě Visual Studio.

  5. Do souboru .csproj v elementu PropertyGroup přidejte následující prvky.

    Tento příklad určuje jako testovací architekturu Jest nebo Mocha. Místo toho můžete zadat pásku nebo Jasmine.

    Prvek JavaScriptTestRoot určuje, že testy jednotek budou ve složce testů kořenového adresáře projektu.

    <PropertyGroup>
       ...
       <JavaScriptTestRoot>tests\</JavaScriptTestRoot>
       <JavaScriptTestFramework>Jest</JavaScriptTestFramework>
       <GenerateProgramFile>false</GenerateProgramFile>
    </PropertyGroup>
    
  6. V Průzkumník řešení klikněte pravým tlačítkem na uzel projektu ASP.NET Core a vyberte Přidat > novou položku. Zvolte konfigurační soubor JSON TypeScriptu a pak vyberte Přidat.

    Pokud nevidíte všechny šablony položek, vyberte Zobrazit všechny šablony a pak zvolte šablonu položky.

    Visual Studio přidá soubor tsconfig.json do kořenového adresáře projektu. Tento soubor můžete použít ke konfiguraci možností kompilátoru TypeScriptu.

  7. Otevřete soubor tsconfig.json a nahraďte výchozí kód následujícím kódem:

    {
      "compileOnSave": true,
      "compilerOptions": {
         "noImplicitAny": false,
         "noEmitOnError": true,
         "removeComments": false,
         "sourceMap": true,
         "target": "es5",
         "outDir": "wwwroot/js"
      },
      "include": [
        "scripts/**/*"
      ],
      "exclude": [
       "node_modules",
       "tests"
      ]
    }
    

    Pokud chcete kompilovat testy TypeScriptu do JavaScriptu, odeberte složku testů z oddílu vyloučení .

    Ve složce skriptů můžete vložit kód TypeScriptu pro vaši aplikaci. Příklad projektu, který přidává kód, najdete v tématu Přidání TypeScriptu do existující aplikace ASP.NET Core.

  8. Klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a zvolte Přidat>novou položku (nebo stiskněte ctrl + SHIFT + A). Pomocí vyhledávacího pole vyhledejte soubor npm, zvolte konfigurační soubor npm, použijte výchozí název a klikněte na Přidat.

    Do kořenového adresáře projektu se přidá soubor package.json .

  9. V Průzkumník řešení klikněte pravým tlačítkem na uzel npm v části Závislosti a zvolte Nainstalovat nové balíčky npm.

    Poznámka:

    V některých scénářích Průzkumník řešení nemusí zobrazit uzel npm kvůli známému problému popsanému tady. Pokud potřebujete zobrazit uzel npm, můžete projekt uvolnit (klikněte pravým tlačítkem myši na projekt a zvolte Uvolnit projekt) a pak projekt znovu načtěte, aby se uzel npm znovu zobrazil. Alternativně můžete přidat položky balíčku do souboru package.json a nainstalovat sestavením projektu.

    Pomocí dialogového okna instalace balíčku npm nainstalujte následující balíčky npm:

    • jest
    • jest-editor-support
    • @types/jest

    Tyto balíčky se přidají do souboru package.json v části devDependencies.

     "@types/jest": "^29.5.8",
     "jest": "^29.7.0",
     "jest-editor-support": "^31.1.2"
    
  10. V souboru package.json přidejte test oddíl na konec oddílu scripts :

    "scripts": {
       ...
       "test": "jest"
    },
    
  11. V Průzkumník řešení klikněte pravým tlačítkem myši na testovací složku a zvolte Přidat>novou položku a pak přidejte nový soubor s názvem App.test.tsx.

    Tím se nový soubor přidá do testovací složky.

  12. Do souboru App.test.tsx přidejte následující kód.

    describe('testAsuite', () => {
       it('testA1', async () => {
          expect(2).toBe(2);
       });
    });
    
  13. Otevřete Průzkumníka testů (zvolte >>Test Windows Test Explorer) a Visual Studio vyhledá a zobrazí testy. Pokud se testy nezobrazují na začátku, znovu sestavte projekt a aktualizujte seznam. Následující obrázek znázorňuje příklad Jest se dvěma různými soubory testů jednotek.

    Screenshot of Test Explorer test discovery (ASP.NET Core).

    Poznámka:

    Pro TypeScript nepoužívejte outfile možnost v souboru tsconfig.json, protože Průzkumník testů nebude moct najít testy jednotek. Tuto možnost můžete použít outdir , ale ujistěte se, že jsou konfigurační soubory, jako package.json jsou a tsconfig.json jsou v kořenovém adresáři projektu.

Spouštění testů (ASP.NET Core)

Testy můžete spustit kliknutím na odkaz Spustit vše v Průzkumníku testů. Nebo můžete testy spustit tak, že vyberete jeden nebo více testů nebo skupin, kliknete pravým tlačítkem myši a v místní nabídce vyberete Spustit . Testy běží na pozadí a Průzkumník testů se automaticky aktualizuje a zobrazí výsledky. Vybrané testy můžete také ladit tak, že kliknete pravým tlačítkem myši a vyberete Ladit.

Následující obrázek ukazuje příklad Jest s přidaným druhým testem jednotek.

Screenshot of Test Explorer results (ASP.NET Core).

U některých architektur testů jednotek se testy jednotek obvykle spouštějí proti vygenerovanému kódu JavaScriptu.

Poznámka:

Ve většině scénářů TypeScriptu můžete ladit test jednotek nastavením zarážky v kódu TypeScriptu, kliknutím pravým tlačítkem myši na test v Průzkumníku testů a zvolením Ladit. Ve složitějších scénářích, například v některých scénářích, které používají zdrojové mapy, může být obtížné narazit na zarážky v kódu TypeScriptu. Jako alternativní řešení zkuste použít debugger klíčové slovo.

Poznámka:

Testy profilace a pokrytí kódu se v současné době nepodporují.

Přidání podpory pro architekturu testování jednotek

Podporu dalších testovacích architektur můžete přidat implementací logiky zjišťování a spouštění pomocí JavaScriptu.

Poznámka:

Pro ASP.NET Core přidejte balíček NuGet Microsoft.JavaScript.UnitTest do projektu a přidejte podporu.

Uděláte to tak, že přidáte složku s názvem testovací architektury v části:

<VisualStudioFolder>\Common7\IDE\Extensions\Microsoft\NodeJsTools\TestAdapter\TestFrameworks

Pokud složku v projektu ASP.NET Core nevidíteNodeJsTools, přidejte úlohu vývoje Node.js pomocí Instalační program pro Visual Studio. Tato úloha zahrnuje podporu testování jednotek v JavaScriptu a TypeScriptu.

Tato složka musí obsahovat javascriptový soubor se stejným názvem, který exportuje následující dvě funkce:

  • find_tests
  • run_tests

Dobrý příklad find_tests implementace a run_tests implementace najdete v implementaci architektury testování jednotek Mocha v těchto tématech:

<VisualStudioFolder>\Common7\IDE\Extensions\Microsoft\NodeJsTools\TestAdapter\TestFrameworks\mocha\mocha.js

Ke zjišťování dostupných testovacích architektur dochází při spuštění sady Visual Studio. Pokud je v době, kdy je sada Visual Studio spuštěná, přidá se architektura, restartujte Visual Studio, aby ho detekoval. Při provádění změn v implementaci ale nemusíte restartovat.

Testy jednotek v rozhraní .NET Framework

Nejste omezeni na psaní testů jednotek pouze v projektech Node.js a ASP.NET Core. Když přidáte vlastnosti TestFramework a TestRoot do libovolného projektu jazyka C# nebo Visual Basic, tyto testy budou uvedeny a můžete je spustit pomocí okna Průzkumníka testů.

Pokud to chcete povolit, klikněte pravým tlačítkem myši na uzel projektu v Průzkumník řešení, zvolte Uvolnit projekt a pak zvolte Upravit projekt. Potom do souboru projektu přidejte do skupiny vlastností následující dva prvky.

Důležité

Ujistěte se, že skupina vlastností, do které přidáváte prvky, nemá zadanou podmínku. To může způsobit neočekávané chování.

<PropertyGroup>
    <JavaScriptTestRoot>tests\</JavaScriptTestRoot>
    <JavaScriptTestFramework>Tape</JavaScriptTestFramework>
</PropertyGroup>

Potom přidejte testy do zadané kořenové složky testu a budou dostupné ke spuštění v okně Průzkumníka testů. Pokud se zpočátku nezobrazí, budete možná muset projekt znovu sestavit.

Test jednotek .NET Core a .NET Standard

Kromě předchozích vlastností popsaných pro rozhraní .NET Framework musíte také nainstalovat balíček NuGet Microsoft.JavaScript.UnitTest a nastavit vlastnost:

<PropertyGroup>
    <GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>

Některé testovací architektury můžou pro detekci testů vyžadovat další balíčky npm. Například jest vyžaduje balíček npm s podporou jest-editoru. V případě potřeby si projděte dokumentaci pro konkrétní architekturu.

Zápis testů jednotek v projektu Node.js (.njsproj)

Před přidáním testů jednotek do projektu v projektech Node.js se ujistěte, že je v projektu místně nainstalovaná architektura, kterou chcete použít. To se dá snadno udělat pomocí instalačního okna balíčku npm.

Upřednostňovaným způsobem, jak do projektu přidat testy jednotek, je vytvoření složky testů v projektu a nastavení jako kořen testu ve vlastnostech projektu. Musíte také vybrat testovací architekturu, kterou chcete použít.

Screenshot of set test root and test framework.

Do projektu můžete přidat jednoduché prázdné testy pomocí dialogového okna Přidat novou položku . JavaScript i TypeScript jsou podporovány ve stejném projektu.

Screenshot of how to add new unit test.

Pro test jednotek Mocha použijte následující kód:

var assert = require('assert');

describe('Test Suite 1', function() {
    it('Test 1', function() {
        assert.ok(true, "This shouldn't fail");
    })

    it('Test 2', function() {
        assert.ok(1 === 1, "This shouldn't fail");
        assert.ok(false, "This should fail");
    })
})

Pokud jste nenastavili možnosti testování jednotek ve vlastnostech projektu, musíte zajistit , aby vlastnost Test Framework v okně Vlastnosti byla nastavena na správnou testovací architekturu pro soubory testů jednotek. To se provádí automaticky pomocí šablon souborů testu jednotek.

Screenshot of choosing Test Framework.

Poznámka:

Možnosti testování jednotek převezmou přednost před nastavením jednotlivých souborů.

Po otevření Průzkumníka testů (zvolte Test>>Windows Test Explorer), Visual Studio vyhledá a zobrazí testy. Pokud se testy nezobrazují na začátku, znovu sestavte projekt a aktualizujte seznam.

Screenshot of Test Explorer.

Poznámka:

Pro TypeScript nepoužívejte outdir v souboru tsconfig.json možnost ani outfile možnost, protože Průzkumník testů nebude moct najít testy jednotek.

Spouštění testů (Node.js)

Testy můžete spouštět v sadě Visual Studio nebo z příkazového řádku.

Spouštění testů v sadě Visual Studio

Testy můžete spustit kliknutím na odkaz Spustit vše v Průzkumníku testů. Nebo můžete testy spustit tak, že vyberete jeden nebo více testů nebo skupin, kliknete pravým tlačítkem myši a v místní nabídce vyberete Spustit . Testy běží na pozadí a Průzkumník testů se automaticky aktualizuje a zobrazí výsledky. Vybrané testy můžete také ladit tak, že kliknete pravým tlačítkem myši a vyberete Ladit.

Pro TypeScript se testy jednotek spouští proti vygenerovanému kódu JavaScriptu.

Poznámka:

Ve většině scénářů TypeScriptu můžete ladit test jednotek nastavením zarážky v kódu TypeScriptu, kliknutím pravým tlačítkem myši na test v Průzkumníku testů a zvolením Ladit. Ve složitějších scénářích, například v některých scénářích, které používají zdrojové mapy, může být obtížné narazit na zarážky v kódu TypeScriptu. Jako alternativní řešení zkuste použít debugger klíčové slovo.

Poznámka:

V současné době nepodporujeme profilaci testů ani pokrytí kódu.

Spuštění testů z příkazového řádku

Testy můžete spustit z příkazového řádku pro vývojáře pro Visual Studio pomocí následujícího příkazu:

vstest.console.exe <path to project file>\NodejsConsoleApp23.njsproj /TestAdapterPath:<VisualStudioFolder>\Common7\IDE\Extensions\Microsoft\NodeJsTools\TestAdapter

Tento příkaz zobrazuje výstup podobný následujícímu:

Microsoft (R) Test Execution Command Line Tool Version 15.5.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Processing: NodejsConsoleApp23\NodejsConsoleApp23\UnitTest1.js
  Creating TestCase:NodejsConsoleApp23\NodejsConsoleApp23\UnitTest1.js::Test Suite 1 Test 1::mocha
  Creating TestCase:NodejsConsoleApp23\NodejsConsoleApp23\UnitTest1.js::Test Suite 1 Test 2::mocha
Processing finished for framework of Mocha
Passed   Test Suite 1 Test 1
Standard Output Messages:
 Using default Mocha settings
 1..2
 ok 1 Test Suite 1 Test 1

Failed   Test Suite 1 Test 2
Standard Output Messages:
 not ok 1 Test Suite 1 Test 2
   AssertionError [ERR_ASSERTION]: This should fail
       at Context.<anonymous> (NodejsConsoleApp23\NodejsConsoleApp23\UnitTest1.js:10:16)

Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.
Test Run Failed.
Test execution time: 1.5731 Seconds

Poznámka:

Pokud se zobrazí chyba indikující, že vstest.console.exe nelze najít, ujistěte se, že jste otevřeli příkazový řádek pro vývojáře, a ne běžný příkazový řádek.