Поделиться через


Модульное тестирование JavaScript и TypeScript в Visual Studio

Вы можете создавать и запускать модульные тесты в Visual Studio с помощью некоторых из более популярных платформ JavaScript без необходимости переключиться в командную строку. Поддерживаются как Node.js, так и ASP.NET основные проекты.

Поддерживаемые платформы:

Поддерживаемые платформы:

Если любимая платформа не поддерживается, см. статью "Добавление поддержки для платформы модульного тестирования " для получения сведений о добавлении поддержки.

Написание модульных тестов для проекта на основе ИНТЕРФЕЙСА командной строки (.esproj)

Проекты на основе интерфейса командной строки, поддерживаемые в Visual Studio 2022, работают с обозревателем тестов. Vitest — это встроенная тестовая платформа для проектов React и Vue (ранее Jest), а Карма и Jasmine используются для проектов Angular. По умолчанию вы сможете выполнять тесты по умолчанию, предоставляемые каждой платформой, а также любые дополнительные тесты, которые вы пишете. Просто нажмите кнопку "Запустить " в обозревателе тестов. Если у вас еще нет открытого обозревателя тестов, его можно найти, выбравобозреватель тестов> в строке меню.

Чтобы запустить модульные тесты из командной строки, щелкните правой кнопкой мыши проект в обозревателе решений, выберите "Открыть в терминале" и выполните команду, определенную для типа теста.

Дополнительные сведения о настройке модульных тестов см. в следующих статьях:

Здесь также приведен простой пример. Однако используйте приведенные выше ссылки для получения полных сведений.

Добавление модульного теста (.esproj)

Следующий пример основан на шаблоне проекта TypeScript React, предоставленном в Visual Studio 2022 версии 17.12 или более поздней версии, который является шаблоном автономного проекта TypeScript React . Для Vue и Angular шаги аналогичны.

  1. В обозревателе решений щелкните проект React правой кнопкой мыши и выберите "Изменить файл проекта".

  2. Убедитесь, что следующие свойства присутствуют в файле esproj со значениями, отображаемыми.

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

    В этом примере указывается Vitest в качестве тестовой платформы. Вместо этого можно указать Mocha, Tape, Jasmine или Jest.

    Элемент JavaScriptTestRoot указывает, что модульные тесты будут находиться в папке src корневого каталога проекта. Кроме того, обычно указывается тестовая папка.

  3. В обозревателе решений щелкните правой кнопкой мыши узел npm и выберите "Установить новые пакеты npm".

    Используйте диалоговое окно установки пакета npm, чтобы установить следующие пакеты npm:

    • vitest

    Этот пакет добавляется в файл package.json в зависимости.

    Замечание

    Если вы используете jest, пакет npm поддержки jest-editor-support требуется, а также пакет jest.

  4. В package.jsonдобавьте test раздел в конце scripts раздела:

    "scripts": {
       ...
       "test": "vitest"
    },
    
  5. В обозревателе решений щелкните правой кнопкой мыши папку src и выберите команду "Добавить>новый элемент", а затем добавьте новый файл с именем App.test.tsx.

    При этом новый файл добавляется в папку src.

  6. Добавьте следующий код в App.test.tsx.

    import { describe, it, expect } from 'vitest';
    
    describe('testAsuite', () => {
       it('testA1', async () => {
          expect(2).toBe(2);
       });
    });
    
  7. Откройте обозреватель тестов (выберите>обозреватель тестов) и Visual Studio обнаруживает и отображает тесты. Если тесты не отображаются изначально, перестройте проект, чтобы обновить список.

    Снимок экрана: обнаружение тестов обозревателя тестов (.esproj).

    Замечание

    Для TypeScript не используйте outfile параметр в tsconfig.json, так как обозреватель тестов не сможет найти модульные тесты. Этот параметр можно использовать outdir , но убедитесь, что файлы конфигурации, такие как package.json и tsconfig.json находятся в корневом каталоге проекта.

    Это важно

    Если выходные данные тестов в окне вывода отображают ошибку ReadOnlySpan во время обнаружения тестов, используйте следующее решение для известной проблемы MSBuild. Для Visual Studio 2022, откройте папку Program Files\Microsoft Visual Studio\2022\<version>\Common7\IDE\Extensions\TestPlatform, и переименуйте System.Memory.dll в другое название. Это исправление включает обнаружение тестов.

Выполнение тестов (.esproj)

Вы можете выполнить тесты, щелкнув ссылку "Выполнить все " в обозревателе тестов. Кроме того, можно выполнить тесты, выбрав один или несколько тестов или групп, щелкнув правой кнопкой мыши и выбрав команду "Выполнить " в контекстном меню. Тесты выполняются в фоновом режиме и обозревателе тестов автоматически обновляются и отображают результаты. Кроме того, можно также выполнить отладку выбранных тестов, щелкнув правой кнопкой мыши и выбрав "Отладка".

На следующем рисунке показан пример с добавленным вторым модульным тестом.

Снимок экрана: результаты обозревателя тестов (.esproj).

Для некоторых платформ модульных тестов модульные тесты обычно выполняются в созданном коде JavaScript.

Замечание

В большинстве сценариев TypeScript можно выполнить отладку модульного теста, установив точку останова в коде TypeScript, щелкнув правой кнопкой мыши тест в обозревателе тестов и выбрав "Отладка". В более сложных сценариях, таких как некоторые сценарии, использующие исходные карты, в коде TypeScript могут возникнуть трудности при достижении точек останова. В качестве обходного решения попробуйте использовать ключевое debugger слово.

Замечание

Тесты профилирования и покрытие кода в настоящее время не поддерживаются.

Запуск модульных тестов в консоли для проекта на основе командной строки (.esproj)

Модульные тесты можно запускать непосредственно из командной строки для платформы модульных тестов так же, как и в случае, если вы не использовали Visual Studio.

Вы также можете запустить тесты из командной строки с помощью vstest.console. Например, можно использовать vstest.console для поддержания согласованности с модульными тестами C# или для запуска в Azure DevOps. Используйте следующую команду, но замените MyProj именем вашего проекта.

vstest.console .\MyProj.esproj /TestAdapterPath:"C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\Extensions\Microsoft\JavaScript"
vstest.console .\MyProj.esproj /TestAdapterPath:"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\Microsoft\JavaScript"

Написание модульных тестов для ASP.NET Core

Чтобы добавить поддержку модульного тестирования JavaScript и TypeScript в проекте ASP.NET Core, необходимо добавить поддержку TypeScript, npm и модульного тестирования в проект, включая необходимые пакеты NuGet.

Добавление модульного теста (ASP.NET Core)

Следующий пример основан на шаблоне проекта ASP.NET Core Model-View-Controller и включает добавление модульного теста Jest или Mocha.

  1. Создайте проект ASP.NET Core Model-View-Controller.

    Пример проекта см. в разделе "Добавление TypeScript" в существующее приложение ASP.NET Core. Для поддержки модульного тестирования рекомендуется начать с стандартного шаблона проекта ASP.NET Core.

  2. В обозревателе решений (справа) щелкните правой кнопкой мыши узел проекта ASP.NET Core и выберите пункт "Управление пакетами NuGet для решений".

  3. На вкладке "Обзор" найдите следующие пакеты и установите каждый из них:

    Используйте пакет NuGet для добавления поддержки TypeScript вместо пакета npm TypeScript.

  4. В обозревателе решений щелкните правой кнопкой мыши узел проекта и выберите пункт "Изменить файл проекта".

    Csproj-файл открывается в Visual Studio.

  5. Добавьте следующие элементы в CSPROJ-файл в PropertyGroup элемент.

    В этом примере указывается Jest или Mocha в качестве тестовой платформы. Вместо этого можно указать Ленту или Jasmine.

    Элемент JavaScriptTestRoot указывает, что модульные тесты будут находиться в папке тестов корневого каталога проекта.

    <PropertyGroup>
       ...
       <JavaScriptTestRoot>tests\</JavaScriptTestRoot>
       <JavaScriptTestFramework>Jest</JavaScriptTestFramework>
       <GenerateProgramFile>false</GenerateProgramFile>
    </PropertyGroup>
    
  6. В обозревателе решений щелкните правой кнопкой мыши узел проекта ASP.NET Core и выберите "Добавить > новый элемент". Выберите файл конфигурации JSON TypeScript, а затем выберите Добавить.

    Если вы не видите все шаблоны элементов, выберите показать все шаблоны, а затем выберите шаблон элемента.

    Visual Studio добавляет файл tsconfig.json в корневой каталог проекта. Этот файл можно использовать для настройки параметров компилятора TypeScript.

  7. Откройте tsconfig.json и замените код по умолчанию следующим кодом:

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

    Для Jest, если вы хотите скомпилировать тесты TypeScript в JavaScript, удалите папку тестов из раздела исключения .

    Папка скриптов — это место, где можно поместить код TypeScript для приложения. Пример проекта, добавляющего код, см. в разделе "Добавление TypeScript" в существующее приложение ASP.NET Core.

  8. Щелкните проект правой кнопкой мыши в обозревателе решений и выберите команду "Добавить>новый элемент " (или нажмите клавиши CTRL + SHIFT + A). Используйте поле поиска, чтобы найти файл npm, выберите файл конфигурации npm, используйте имя по умолчанию и нажмите кнопку "Добавить".

    Файл package.json добавляется в корневой каталог проекта.

  9. В обозревателе решений щелкните правой кнопкой мыши узел npm в разделе "Зависимости" и выберите " Установить новые пакеты npm".

    Замечание

    В некоторых сценариях обозреватель решений может не отображать узел npm из-за известной проблемы, описанной здесь. Если нужно просмотреть узел npm, вы можете выгрузить проект (щелкните проект правой кнопкой мыши и выберите " Выгрузить проект") и перезагрузите проект, чтобы сделать узел npm повторно отображаемым. Кроме того, можно добавить записи пакета в package.json и установить, создав проект.

    Используйте диалоговое окно установки пакета npm, чтобы установить следующие пакеты npm:

    • шутка
    • jest-editor-support
    • @types/jest

    Эти пакеты добавляются в файл package.json в разделе devDependencies.

     "@types/jest": "^29.5.8",
     "jest": "^29.7.0",
     "jest-editor-support": "^31.1.2"
    
  10. В package.jsonдобавьте test раздел в конце scripts раздела:

    "scripts": {
       ...
       "test": "jest"
    },
    
  11. В обозревателе решений щелкните правой кнопкой мыши тестовую папку и выберите команду "Добавить>новый элемент", а затем добавьте новый файл с именем App.test.tsx.

    При этом новый файл добавляется в тестовую папку.

  12. Добавьте следующий код в App.test.tsx.

    describe('testAsuite', () => {
       it('testA1', async () => {
          expect(2).toBe(2);
       });
    });
    
  13. Откройте обозреватель тестов (выберите>обозреватель тестов>) и Visual Studio обнаруживает и отображает тесты. Если тесты не отображаются изначально, перестройте проект, чтобы обновить список. На следующем рисунке показан пример Jest с двумя разными файлами модульного теста.

    Снимок экрана: обнаружение тестов обозревателя тестов (ASP.NET Core).

    Замечание

    Для TypeScript не используйте outfile параметр в tsconfig.json, так как обозреватель тестов не сможет найти модульные тесты. Этот параметр можно использовать outdir , но убедитесь, что файлы конфигурации, такие как package.json и tsconfig.json находятся в корневом каталоге проекта.

    Это важно

    Если выходные данные тестов в окне вывода отображают ошибку ReadOnlySpan во время обнаружения тестов, используйте следующее решение для известной проблемы MSBuild. В Visual Studio 2022 откройте папку Program Files\Microsoft Visual Studio\2022\<version>\Common7\IDE\Extensions\TestPlatform и переименуйте System.Memory.dll в другое имя. Это исправление включает обнаружение тестов.

Выполнение тестов (ASP.NET Core)

Вы можете выполнить тесты, щелкнув ссылку "Выполнить все " в обозревателе тестов. Кроме того, можно выполнить тесты, выбрав один или несколько тестов или групп, щелкнув правой кнопкой мыши и выбрав команду "Выполнить " в контекстном меню. Тесты выполняются в фоновом режиме и обозревателе тестов автоматически обновляются и отображают результаты. Кроме того, можно также выполнить отладку выбранных тестов, щелкнув правой кнопкой мыши и выбрав "Отладка".

На следующем рисунке показан пример Jest с добавленным вторым модульным тестом.

Снимок экрана: результаты обозревателя тестов (ASP.NET Core).

Для некоторых платформ модульных тестов модульные тесты обычно выполняются в созданном коде JavaScript.

Замечание

В большинстве сценариев TypeScript можно выполнить отладку модульного теста, установив точку останова в коде TypeScript, щелкнув правой кнопкой мыши тест в обозревателе тестов и выбрав "Отладка". В более сложных сценариях, таких как некоторые сценарии, использующие исходные карты, в коде TypeScript могут возникнуть трудности при достижении точек останова. В качестве обходного решения попробуйте использовать ключевое debugger слово.

Замечание

Тесты профилирования и покрытие кода в настоящее время не поддерживаются.

Добавление поддержки платформы модульного тестирования

Вы можете добавить поддержку дополнительных платформ тестирования, реализуя логику обнаружения и выполнения с помощью JavaScript.

Замечание

Для ASP.NET Core добавьте пакет NuGet Microsoft.JavaScript.UnitTest в проект, чтобы добавить поддержку.

Для этого добавьте папку с именем платформы тестирования в:

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

Если папка не отображается NodeJsTools в проекте ASP.NET Core, добавьте рабочую нагрузку разработки Node.js с помощью Visual Studio Installer. Эта рабочая нагрузка включает поддержку модульного тестирования JavaScript и TypeScript.

Эта папка должна содержать файл JavaScript с тем же именем, который экспортирует следующие две функции:

  • find_tests
  • run_tests

Хороший пример find_tests реализации и run_tests реализации см. в реализации платформы модульного тестирования Mocha в:

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

Обнаружение доступных платформ тестирования происходит в начале Visual Studio. Если платформа добавляется во время выполнения Visual Studio, перезапустите Visual Studio, чтобы обнаружить платформу. Однако при внесении изменений в реализацию не нужно перезапустить.

Модульные тесты в .NET Framework

Вы не ограничиваетесь написанием модульных тестов только в Node.js и ASP.NET основных проектах. При добавлении свойств TestFramework и TestRoot в любой проект C# или Visual Basic эти тесты будут перечисляться, и их можно запустить с помощью окна обозревателя тестов.

Чтобы включить это, щелкните правой кнопкой мыши узел проекта в обозревателе решений, выберите " Выгрузить проект" и выберите команду "Изменить проект". Затем в файле проекта добавьте в группу свойств следующие два элемента.

Это важно

Убедитесь, что группа свойств, добавляемая элементами, не имеет указанного условия. Это может привести к непредвиденному поведению.

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

Затем добавьте тесты в указанную корневую папку теста, и они будут доступны для запуска в окне обозревателя тестов. Если изначально они не отображаются, может потребоваться перестроить проект.

Модульное тестирование .NET Core и .NET Standard

Помимо предыдущих свойств, описанных для .NET Framework, также необходимо установить пакет NuGet Microsoft.JavaScript.UnitTest и задать свойство:

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

Для обнаружения тестов некоторые платформы тестирования могут потребоваться дополнительные пакеты npm. Например, для jest требуется пакет npm для jest-editor-support. При необходимости проверьте документацию для конкретной платформы.

Написание модульных тестов в проекте Node.js (Njsproj)

Для Node.js проектов перед добавлением модульных тестов в проект убедитесь, что платформа, которую вы планируете использовать локально в проекте. Это легко сделать с помощью окна установки пакета npm.

Предпочтительный способ добавить модульные тесты в проект — создать папку тестов в проекте и задать ее в качестве корневого каталога теста в свойствах проекта. Кроме того, необходимо выбрать тестовую платформу, которую вы хотите использовать.

Снимок экрана: корневая и тестовая платформа набора.

Вы можете добавить простые пустые тесты в проект с помощью диалогового окна "Добавить новый элемент ". JavaScript и TypeScript поддерживаются в одном проекте.

Снимок экрана: добавление нового модульного теста.

Для модульного теста Mocha используйте следующий код:

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

Если параметры модульного теста не заданы в свойствах проекта, необходимо убедиться, что свойство Test Framework в окне свойств задано для правильной платформы тестирования для файлов модульного теста. Это выполняется автоматически шаблонами файлов модульного теста.

Снимок экрана: выбор Test Framework.

Замечание

Параметры модульного теста будут принимать предпочтения по параметрам для отдельных файлов.

После открытия обозревателя тестов (выберите>обозреватель тестов>), Visual Studio обнаруживает и отображает тесты. Если тесты не отображаются изначально, перестройте проект, чтобы обновить список.

Снимок экрана: обозреватель тестов.

Замечание

Для TypeScript не используйте outdir параметр в outfiletsconfig.json, так как обозреватель тестов не сможет найти модульные тесты.

Выполнение тестов (Node.js)

Тесты можно выполнять в Visual Studio или из командной строки.

Выполнение тестов в Visual Studio

Вы можете выполнить тесты, щелкнув ссылку "Выполнить все " в обозревателе тестов. Кроме того, можно выполнить тесты, выбрав один или несколько тестов или групп, щелкнув правой кнопкой мыши и выбрав команду "Выполнить " в контекстном меню. Тесты выполняются в фоновом режиме и обозревателе тестов автоматически обновляются и отображают результаты. Кроме того, можно также выполнить отладку выбранных тестов, щелкнув правой кнопкой мыши и выбрав "Отладка".

Для TypeScript модульные тесты выполняются в созданном коде JavaScript.

Замечание

В большинстве сценариев TypeScript можно выполнить отладку модульного теста, установив точку останова в коде TypeScript, щелкнув правой кнопкой мыши тест в обозревателе тестов и выбрав "Отладка". В более сложных сценариях, таких как некоторые сценарии, использующие исходные карты, в коде TypeScript могут возникнуть трудности при достижении точек останова. В качестве обходного решения попробуйте использовать ключевое debugger слово.

Замечание

В настоящее время мы не поддерживаем тесты профилирования или покрытие кода.

Выполнение тестов из командной строки

Тесты можно выполнить из командной строки разработчика для Visual Studio с помощью следующей команды:

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

Эта команда показывает выходные данные, аналогичные следующим:

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

Замечание

Если появится сообщение об ошибке, указывающее, что vstest.console.exe не удается найти, убедитесь, что вы открыли командную строку разработчика, а не обычную командную строку.