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

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

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

Если ваша любимая платформа не поддерживается, сведения о расширении поддержки см. в разделе Расширение поддержки платформ для модульного тестирования.

Написание модульных тестов для проекта на основе CLI (ESPROJ)

Проекты на основе CLI, поддерживаемые в Visual Studio 2022, работают с обозревателем тестов. Jest — это встроенная платформа тестирования для проектов React и Vue, а Karma и Jasmine используются для проектов Angular. По умолчанию вы сможете выполнять тесты, по умолчанию предоставляемые каждой платформой, а также любые дополнительные тесты, которые вы создаете. Просто нажмите кнопку Выполнить в обозревателе тестов. Если вы еще не открыли обозреватель тестов, выберите в строке меню пункт Тест>Обозреватель тестов.

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

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

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

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

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

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

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

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

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

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

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

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

    • Шутка
    • jest-editor-support

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

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

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

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

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

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

    Screenshot of Test Explorer test discovery (.esproj).

    Примечание.

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

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

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

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

Screenshot of Test Explorer results (.esproj).

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

Примечание.

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

Примечание.

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

Написание модульных тестов для 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. На вкладке "Обзор" найдите следующие пакеты и установите каждый из них:

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

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

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

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

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

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

    <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. Откройте обозреватель тестов (выберите Тест>Windows>Обозреватель тестов), и тесты будут обнаружены и показаны в Visual Studio. Если тесты не отображаются изначально, перестройте проект, чтобы обновить список. На следующем рисунке показан пример Jest с двумя разными файлами модульного теста.

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

    Примечание.

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

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

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

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

Screenshot of Test Explorer results (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 Core. Когда вы добавляете свойства 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.

Чтобы добавлять в проект модульные тесты, рекомендуется создать в проекте папку tests и настроить ее как тестовый корень в свойствах проекта. Также необходимо выбрать желаемую платформу тестирования.

Screenshot of set test root and test framework.

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

Screenshot of how to add new unit test.

Для модульного теста 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");
    })
})

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

Screenshot of choosing Test Framework.

Примечание.

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

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

Screenshot of Test Explorer.

Примечание.

В файле tsconfig.json TypeScript не используйте параметр outdir или outfile, так как обозреватель тестов не сможет найти модульные тесты.

Выполнение тестов (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, убедитесь, что открыли командную строку разработчика, а не обычную командную строку.