Delen via


Eenheid testen van JavaScript en TypeScript in Visual Studio

U kunt eenheidstests schrijven en uitvoeren in Visual Studio met behulp van een aantal populaire JavaScript-frameworks zonder dat u hoeft over te schakelen naar een opdrachtprompt. Zowel Node.js als ASP.NET Core-projecten worden ondersteund.

De ondersteunde frameworks zijn:

De ondersteunde frameworks zijn:

Als uw favoriete framework niet wordt ondersteund, raadpleegt u Ondersteuning toevoegen voor een moduletestframework voor informatie over het toevoegen van ondersteuning.

Eenheidstests schrijven voor een CLI-project (.esproj)

De CLI-projecten ondersteund in Visual Studio 2022 werken met Test Explorer. Vitest is het ingebouwde testframework voor React- en Vue-projecten (voorheen Jest) en Karma en Jasmine worden gebruikt voor Angular-projecten. Standaard kunt u de standaardtests uitvoeren die door elk framework worden geleverd, evenals eventuele aanvullende tests die u schrijft. Druk op de knop uitvoeren in Test Explorer. Als u Test Explorer nog niet hebt geopend, kunt u deze vinden door Test>Test Explorer te selecteren in de menubalk.

Als u eenheidstests vanaf de opdrachtregel wilt uitvoeren, klikt u met de rechtermuisknop op het project in Solution Explorer, kiest u Openen in Terminalen voert u de opdracht uit die specifiek is voor het testtype.

Zie het volgende voor informatie over het instellen van eenheidstests:

Hier vindt u ook een eenvoudig voorbeeld. Gebruik echter de voorgaande koppelingen voor volledige informatie.

Een eenheidstest toevoegen (.esproj)

Het volgende voorbeeld is gebaseerd op de TypeScript React-projectsjabloon die is opgegeven in Visual Studio 2022 versie 17.12 of hoger. Dit is de sjabloon Standalone TypeScript React Project. Voor Vue en Angular zijn de stappen vergelijkbaar.

  1. Klik in Solution Explorer met de rechtermuisknop op het React-project en kies Projectbestand bewerken.

  2. Zorg ervoor dat de volgende eigenschappen aanwezig zijn in het bestand .esproj met de weergegeven waarden.

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

    In dit voorbeeld wordt Vitest opgegeven als testframework. U kunt in plaats daarvan Mocha, Tape, Jasmine of Jest opgeven.

    Het element JavaScriptTestRoot geeft aan dat de eenheidstests zich in de map src- van de hoofdmap van het project bevinden. Het is ook gebruikelijk om de test map op te geven.

  3. Klik in Solution Explorer met de rechtermuisknop op het knooppunt npm en kies Nieuwe npm-pakketten installeren.

    Gebruik het dialoogvenster voor het installeren van npm-pakketten om de volgende NPM-pakketten te installeren:

    • vitest

    Dit pakket wordt toegevoegd aan het package.json-bestand onder afhankelijkheden.

    Notitie

    Als u jest gebruikt, is het npm-pakket jest-editor-support vereist, evenals het jest-pakket.

  4. Voeg in package.jsonde sectie test toe aan het einde van de sectie scripts:

    "scripts": {
       ...
       "test": "vitest"
    },
    
  5. Klik in Solution Explorer met de rechtermuisknop op de src-map en kies Toevoegen>Nieuw itemen voeg vervolgens een nieuw bestand toe met de naam App.test.tsx.

    Hiermee voegt u het nieuwe bestand toe in de map src.

  6. Voeg de volgende code toe aan App.test.tsx.

    import { describe, it, expect } from 'vitest';
    
    describe('testAsuite', () => {
       it('testA1', async () => {
          expect(2).toBe(2);
       });
    });
    
  7. Open Test Explorer (kies Test>Test Explorer) en Visual Studio detecteert en geeft tests weer. Als de tests aanvankelijk niet worden weergegeven, bouw het project dan opnieuw om de lijst te verversen.

    schermopname van Test Explorer-testdetectie (.esproj).

    Notitie

    Gebruik voor TypeScript de optie outfile niet in tsconfig.json, omdat Test Explorer uw eenheidstests niet kan vinden. U kunt de optie outdir gebruiken, maar zorg ervoor dat configuratiebestanden zoals package.json en tsconfig.json zich in de hoofdmap van het project bevinden.

Tests uitvoeren (.esproj)

U kunt de tests uitvoeren door te klikken op de koppeling Alle uitvoeren in Test Explorer. U kunt ook tests uitvoeren door een of meer tests of groepen te selecteren, met de rechtermuisknop te klikken en uitvoeren te selecteren in het snelmenu. Tests worden op de achtergrond uitgevoerd en Test Explorer wordt automatisch bijgewerkt en toont de resultaten. Bovendien kunt u ook fouten opsporen in geselecteerde tests door met de rechtermuisknop te klikken en Foutopsporingte selecteren.

In de volgende afbeelding ziet u het voorbeeld waarin een tweede eenheidstest is toegevoegd.

Schermopname van testverkennerresultaten (.esproj).

Voor sommige eenheidstestframeworks worden eenheidstests doorgaans uitgevoerd op basis van de gegenereerde JavaScript-code.

Notitie

In de meeste TypeScript-scenario's kunt u fouten opsporen in een eenheidstest door een onderbrekingspunt in TypeScript-code in te stellen, met de rechtermuisknop op een test in Test Explorer te klikken en Foutopsporingte kiezen. In complexere scenario's, zoals sommige scenario's die gebruikmaken van brontoewijzingen, kan het lastig zijn om onderbrekingspunten in TypeScript-code te bereiken. Probeer als tijdelijke oplossing het trefwoord debugger te gebruiken.

Notitie

Profileringstests en codedekking worden momenteel niet ondersteund.

Eenheidstests schrijven voor ASP.NET Core

Als u ondersteuning wilt toevoegen voor eenheidstests van JavaScript en TypeScript in een ASP.NET Core-project, moet u ondersteuning voor TypeScript-, Npm- en eenheidstests toevoegen aan het project door vereiste NuGet-pakketten op te geven.

Een eenheidstest toevoegen (ASP.NET Core)

Het volgende voorbeeld is gebaseerd op de ASP.NET Core Model-View-Controller projectsjabloon en bevat het toevoegen van een Jest- of Mocha-eenheidstest.

  1. Maak een ASP.NET Core Model-View-Controller-project.

    Zie TypeScript toevoegen aan een bestaand ASP.NET Core-appvoor een voorbeeldproject. Voor ondersteuning voor eenheidstests raden we u aan om te beginnen met een standaardsjabloon voor ASP.NET Core-project.

  2. Klik in Solution Explorer (rechterdeelvenster) met de rechtermuisknop op het ASP.NET Core-projectknooppunt en selecteer NuGet-pakketten voor oplossingen beheren.

  3. Zoek op het tabblad Bladeren naar de volgende pakketten en installeer elk pakket:

    Gebruik het NuGet-pakket om TypeScript-ondersteuning toe te voegen in plaats van het npm TypeScript-pakket.

  4. Klik in Solution Explorer met de rechtermuisknop op het projectknooppunt en kies Projectbestand bewerken.

    Het bestand .csproj wordt geopend in Visual Studio.

  5. Voeg de volgende elementen toe aan het bestand .csproj in het element PropertyGroup.

    In dit voorbeeld wordt Jest of Mocha opgegeven als testframework. U kunt in plaats daarvan Tape of Jasmine opgeven.

    Het JavaScriptTestRoot-element geeft aan dat je unit tests zich in de -tests-map van de projecthoofddirectory bevinden.

    <PropertyGroup>
       ...
       <JavaScriptTestRoot>tests\</JavaScriptTestRoot>
       <JavaScriptTestFramework>Jest</JavaScriptTestFramework>
       <GenerateProgramFile>false</GenerateProgramFile>
    </PropertyGroup>
    
  6. Klik in Solution Explorer met de rechtermuisknop op het ASP.NET Core-projectknooppunt en selecteer Toevoegen > Nieuw item. Kies het TypeScript JSON-configuratiebestanden selecteer toevoegen.

    Als u niet alle itemsjablonen ziet, selecteert u Alle sjablonen weergevenen kiest u vervolgens de itemsjabloon.

    Visual Studio voegt het tsconfig.json-bestand toe aan de hoofdmap van het project. U kunt dit bestand gebruiken om opties te configureren voor de TypeScript-compiler.

  7. Open tsconfig.json en vervang de standaardcode door de volgende code:

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

    Als u TypeScript-tests voor Jest naar JavaScript wilt compileren, verplaatst u de tests map uit de uitsluitingssectie.

    In de -scripts map kunt u de TypeScript-code voor uw app plaatsen. Zie TypeScript toevoegen aan een bestaande ASP.NET Core-appvoor een voorbeeldproject dat code toevoegt.

  8. Klik met de rechtermuisknop op het project in Solution Explorer en kies Add>New Item (of druk op Ctrl + Shift + A). Gebruik het zoekvak om het npm-bestand te zoeken, kies het npm-configuratiebestand, gebruik de standaardnaam en klik op Toevoegen.

    Er wordt een package.json-bestand toegevoegd aan de hoofdmap van het project.

  9. Klik in Solution Explorer met de rechtermuisknop op het knooppunt npm onder Afhankelijkheden en kies Nieuwe npm-pakketten installeren.

    Notitie

    In sommige scenario's wordt in Solution Explorer mogelijk het npm-knooppunt niet weergegeven vanwege een bekend probleem dat hier wordt beschreven. Als u het npm-knooppunt wilt zien, kunt u het project verwijderen (klik met de rechtermuisknop op het project en kies Projectverwijderen) en laadt u het project opnieuw om het npm-knooppunt opnieuw te laten verschijnen. U kunt de pakketvermeldingen ook toevoegen aan package.json en installeren door het project te bouwen.

    Gebruik het dialoogvenster voor het installeren van npm-pakketten om de volgende NPM-pakketten te installeren:

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

    Deze pakketten worden toegevoegd aan het package.json-bestand onder devDependencies.

     "@types/jest": "^29.5.8",
     "jest": "^29.7.0",
     "jest-editor-support": "^31.1.2"
    
  10. Voeg in package.jsonde sectie test toe aan het einde van de sectie scripts:

    "scripts": {
       ...
       "test": "jest"
    },
    
  11. Klik in Solution Explorer met de rechtermuisknop op de map test en kies Add>New Itemen voeg vervolgens een nieuw bestand toe met de naam App.test.tsx.

    Dit voegt het nieuwe bestand toe aan de testmap .

  12. Voeg de volgende code toe aan App.test.tsx.

    describe('testAsuite', () => {
       it('testA1', async () => {
          expect(2).toBe(2);
       });
    });
    
  13. Open Test Explorer (kies Test>Windows>Test Explorer) en Visual Studio detecteert en geeft tests weer. Als de tests aanvankelijk niet worden weergegeven, bouw het project dan opnieuw om de lijst te verversen. In de volgende afbeelding ziet u het Voorbeeld van Jest, met twee verschillende eenheidstestbestanden.

    schermopname van Test Explorer-testdetectie (ASP.NET Core).

    Notitie

    Gebruik voor TypeScript de optie outfile niet in tsconfig.json, omdat Test Explorer uw eenheidstests niet kan vinden. U kunt de optie outdir gebruiken, maar zorg ervoor dat configuratiebestanden zoals package.json en tsconfig.json zich in de hoofdmap van het project bevinden.

Tests uitvoeren (ASP.NET Core)

U kunt de tests uitvoeren door te klikken op de koppeling Alle uitvoeren in Test Explorer. U kunt ook tests uitvoeren door een of meer tests of groepen te selecteren, met de rechtermuisknop te klikken en uitvoeren te selecteren in het snelmenu. Tests worden op de achtergrond uitgevoerd en Test Explorer wordt automatisch bijgewerkt en toont de resultaten. Bovendien kunt u ook fouten opsporen in geselecteerde tests door met de rechtermuisknop te klikken en Foutopsporingte selecteren.

In de volgende afbeelding ziet u het Voorbeeld van Jest, waarbij een tweede eenheidstest is toegevoegd.

schermopname van testverkennerresultaten (ASP.NET Core).

Voor sommige eenheidstestframeworks worden eenheidstests doorgaans uitgevoerd op basis van de gegenereerde JavaScript-code.

Notitie

In de meeste TypeScript-scenario's kunt u fouten opsporen in een eenheidstest door een onderbrekingspunt in TypeScript-code in te stellen, met de rechtermuisknop op een test in Test Explorer te klikken en Foutopsporingte kiezen. In complexere scenario's, zoals sommige scenario's die gebruikmaken van brontoewijzingen, kan het lastig zijn om onderbrekingspunten in TypeScript-code te bereiken. Probeer als tijdelijke oplossing het trefwoord debugger te gebruiken.

Notitie

Profileringstests en codedekking worden momenteel niet ondersteund.

Ondersteuning toevoegen voor een eenheidstestframework

U kunt ondersteuning voor extra testframeworks toevoegen door de detectie- en uitvoeringslogica te implementeren met behulp van JavaScript.

Notitie

Voeg voor ASP.NET Core het NuGet-pakket Microsoft.JavaScript.UnitTest toe aan uw project om ondersteuning toe te voegen.

U doet dit door een map toe te voegen met de naam van het testframework onder:

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

Als u de map NodeJsTools niet ziet in een ASP.NET Core-project, voegt u de Node.js ontwikkelworkload toe met behulp van het Visual Studio-installatieprogramma. Deze workload bevat ondersteuning voor het testen van eenheden in JavaScript en TypeScript.

Deze map moet een JavaScript-bestand bevatten met dezelfde naam die de volgende twee functies exporteert:

  • find_tests
  • run_tests

Voor een goed voorbeeld van de find_tests en de run_tests-implementaties raadpleegt u de implementatie voor het testframework voor mocha-eenheden in:

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

De detectie van beschikbare testframeworks vindt plaats op het begin van Visual Studio. Als er een framework wordt toegevoegd terwijl Visual Studio wordt uitgevoerd, start u Visual Studio opnieuw om het framework te detecteren. U hoeft echter niet opnieuw op te starten wanneer u wijzigingen aanbrengt in de implementatie.

Eenheidstests in .NET Framework

U bent niet beperkt tot het schrijven van eenheidstests in alleen uw Node.js en ASP.NET Core-projecten. Wanneer u de eigenschappen TestFramework en TestRoot toevoegt aan een C# of Visual Basic-project, worden deze tests opgesomd en kunt u deze uitvoeren met behulp van het venster Test Explorer.

Als u dit wilt inschakelen, klikt u met de rechtermuisknop op het projectknooppunt in Solution Explorer, kiest u Project verwijderenen kiest u vervolgens Project bewerken. Voeg vervolgens in het projectbestand de volgende twee elementen toe aan een eigenschapsgroep.

Belangrijk

Zorg ervoor dat voor de eigenschapsgroep waaraan u de elementen toevoegt geen voorwaarde is opgegeven. Dit kan onverwacht gedrag veroorzaken.

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

Voeg vervolgens uw tests toe aan de testhoofdmap die u hebt opgegeven en deze zijn beschikbaar om te worden uitgevoerd in het venster Test Explorer. Als ze in eerste instantie niet worden weergegeven, moet u het project mogelijk opnieuw opbouwen.

Eenheidstest .NET Core en .NET Standard

Naast de voorgaande eigenschappen die voor .NET Framework worden beschreven, moet u ook het NuGet-pakket installeren Microsoft.JavaScript.UnitTest en de eigenschap instellen:

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

Voor sommige testframeworks zijn mogelijk extra NPM-pakketten vereist voor testdetectie. Voor jest is bijvoorbeeld het npm-pakket jest-editor-support vereist. Raadpleeg indien nodig de documentatie voor het specifieke framework.

Eenheidstests schrijven in een Node.js project (.njsproj)

Voor Node.js projecten moet u voordat u eenheidstests toevoegt aan uw project, ervoor zorgen dat het framework dat u wilt gebruiken lokaal in uw project is geïnstalleerd. Dit is eenvoudig te doen met behulp van het npm-pakketinstallatievenster.

De voorkeursmethode voor het toevoegen van unittests aan uw project is door een map tests in uw project te maken en deze in te stellen als de hoofdmap in de projecteigenschappen. U moet ook het testframework selecteren dat u wilt gebruiken.

schermopname van het testhoofd- en testframework.

U kunt eenvoudige lege tests toevoegen aan uw project met behulp van het dialoogvenster Nieuw item toevoegen. Zowel JavaScript als TypeScript worden ondersteund in hetzelfde project.

schermopname van het toevoegen van een nieuwe eenheidstest.

Gebruik de volgende code voor een Mocha-eenheidstest:

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

Als u de eenheidstestopties niet hebt ingesteld in de projecteigenschappen, moet u ervoor zorgen dat de eigenschap Test Framework in het venster Eigenschappen is ingesteld op het juiste testframework voor uw eenheidstestbestanden. Dit wordt automatisch gedaan door de sjablonen van het eenheidstestbestand.

schermopname van het kiezen van Test Framework.

Notitie

De opties voor eenheidstests hebben voorrang boven de instellingen voor afzonderlijke bestanden.

Nadat u Test Explorer hebt geopend (kies Test>Windows>Test Explorer), detecteert en geeft Visual Studio tests weer. Als de tests aanvankelijk niet worden weergegeven, bouw het project dan opnieuw om de lijst te verversen.

schermopname van Test Explorer.

Notitie

Gebruik voor TypeScript niet de optie outdir of outfile in tsconfig.json, omdat Test Explorer uw eenheidstests niet kan vinden.

Tests uitvoeren (Node.js)

U kunt tests uitvoeren in Visual Studio of vanaf de opdrachtregel.

Tests uitvoeren in Visual Studio

U kunt de tests uitvoeren door te klikken op de koppeling Alle uitvoeren in Test Explorer. U kunt ook tests uitvoeren door een of meer tests of groepen te selecteren, met de rechtermuisknop te klikken en uitvoeren te selecteren in het snelmenu. Tests worden op de achtergrond uitgevoerd en Test Explorer wordt automatisch bijgewerkt en toont de resultaten. Bovendien kunt u ook fouten opsporen in geselecteerde tests door met de rechtermuisknop te klikken en Foutopsporingte selecteren.

Voor TypeScript worden eenheidstests uitgevoerd op basis van de gegenereerde JavaScript-code.

Notitie

In de meeste TypeScript-scenario's kunt u fouten opsporen in een eenheidstest door een onderbrekingspunt in TypeScript-code in te stellen, met de rechtermuisknop op een test in Test Explorer te klikken en Foutopsporingte kiezen. In complexere scenario's, zoals sommige scenario's die gebruikmaken van brontoewijzingen, kan het lastig zijn om onderbrekingspunten in TypeScript-code te bereiken. Probeer als tijdelijke oplossing het trefwoord debugger te gebruiken.

Notitie

Momenteel bieden we geen ondersteuning voor profileringstests of codedekking.

Tests uitvoeren vanaf de opdrachtregel

U kunt de tests uitvoeren vanaf Opdrachtprompt voor Ontwikkelaars voor Visual Studio met behulp van de volgende opdracht:

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

Met deze opdracht ziet u uitvoer die vergelijkbaar is met de volgende:

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

Notitie

Als er een fout optreedt die aangeeft dat vstest.console.exe niet kan worden gevonden, controleert u of u de opdrachtprompt voor ontwikkelaars hebt geopend en niet een gewone opdrachtprompt.