Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Вы можете создавать и запускать модульные тесты в Visual Studio с помощью некоторых из более популярных платформ JavaScript без необходимости переключиться в командную строку. Поддерживаются как Node.js, так и ASP.NET основные проекты.
Поддерживаемые платформы:
- Mocha (mochajs.org)
- Jasmine (Jasmine.github.io)
- Лента (github.com/substack/tape)
- Jest (jestjs.io)
- Vitest (vitest.dev)
Поддерживаемые платформы:
- Mocha (mochajs.org)
- Jasmine (Jasmine.github.io)
- Лента (github.com/substack/tape)
- Jest (jestjs.io)
Если любимая платформа не поддерживается, см. статью "Добавление поддержки для платформы модульного тестирования " для получения сведений о добавлении поддержки.
Написание модульных тестов для проекта на основе ИНТЕРФЕЙСА командной строки (.esproj)
Проекты на основе интерфейса командной строки, поддерживаемые в Visual Studio 2022, работают с обозревателем тестов. Vitest — это встроенная тестовая платформа для проектов React и Vue (ранее Jest), а Карма и Jasmine используются для проектов Angular. По умолчанию вы сможете выполнять тесты по умолчанию, предоставляемые каждой платформой, а также любые дополнительные тесты, которые вы пишете. Просто нажмите кнопку "Запустить " в обозревателе тестов. Если у вас еще нет открытого обозревателя тестов, его можно найти, выбравобозреватель тестов> в строке меню.
Чтобы запустить модульные тесты из командной строки, щелкните правой кнопкой мыши проект в обозревателе решений, выберите "Открыть в терминале" и выполните команду, определенную для типа теста.
Дополнительные сведения о настройке модульных тестов см. в следующих статьях:
- Тестирование с помощью Vitest
- Тестирование React с помощью Jest
- Тестирование Angular
- Тестирование Vue.js
Здесь также приведен простой пример. Однако используйте приведенные выше ссылки для получения полных сведений.
Добавление модульного теста (.esproj)
Следующий пример основан на шаблоне проекта TypeScript React, предоставленном в Visual Studio 2022 версии 17.12 или более поздней версии, который является шаблоном автономного проекта TypeScript React . Для Vue и Angular шаги аналогичны.
В обозревателе решений щелкните проект React правой кнопкой мыши и выберите "Изменить файл проекта".
Убедитесь, что следующие свойства присутствуют в файле esproj со значениями, отображаемыми.
<PropertyGroup> <JavaScriptTestRoot>src\</JavaScriptTestRoot> <JavaScriptTestFramework>Vitest</JavaScriptTestFramework> </PropertyGroup>В этом примере указывается Vitest в качестве тестовой платформы. Вместо этого можно указать Mocha, Tape, Jasmine или Jest.
Элемент
JavaScriptTestRootуказывает, что модульные тесты будут находиться в папке src корневого каталога проекта. Кроме того, обычно указывается тестовая папка.В обозревателе решений щелкните правой кнопкой мыши узел npm и выберите "Установить новые пакеты npm".
Используйте диалоговое окно установки пакета npm, чтобы установить следующие пакеты npm:
- vitest
Этот пакет добавляется в файл package.json в зависимости.
Замечание
Если вы используете jest, пакет npm поддержки jest-editor-support требуется, а также пакет jest.
В package.jsonдобавьте
testраздел в концеscriptsраздела:"scripts": { ... "test": "vitest" },В обозревателе решений щелкните правой кнопкой мыши папку src и выберите команду "Добавить>новый элемент", а затем добавьте новый файл с именем App.test.tsx.
При этом новый файл добавляется в папку src.
Добавьте следующий код в App.test.tsx.
import { describe, it, expect } from 'vitest'; describe('testAsuite', () => { it('testA1', async () => { expect(2).toBe(2); }); });Откройте обозреватель тестов (выберите>обозреватель тестов) и Visual Studio обнаруживает и отображает тесты. Если тесты не отображаются изначально, перестройте проект, чтобы обновить список.
Замечание
Для 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)
Вы можете выполнить тесты, щелкнув ссылку "Выполнить все " в обозревателе тестов. Кроме того, можно выполнить тесты, выбрав один или несколько тестов или групп, щелкнув правой кнопкой мыши и выбрав команду "Выполнить " в контекстном меню. Тесты выполняются в фоновом режиме и обозревателе тестов автоматически обновляются и отображают результаты. Кроме того, можно также выполнить отладку выбранных тестов, щелкнув правой кнопкой мыши и выбрав "Отладка".
На следующем рисунке показан пример с добавленным вторым модульным тестом.
Для некоторых платформ модульных тестов модульные тесты обычно выполняются в созданном коде 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.
Создайте проект ASP.NET Core Model-View-Controller.
Пример проекта см. в разделе "Добавление TypeScript" в существующее приложение ASP.NET Core. Для поддержки модульного тестирования рекомендуется начать с стандартного шаблона проекта ASP.NET Core.
В обозревателе решений (справа) щелкните правой кнопкой мыши узел проекта ASP.NET Core и выберите пункт "Управление пакетами NuGet для решений".
На вкладке "Обзор" найдите следующие пакеты и установите каждый из них:
Используйте пакет NuGet для добавления поддержки TypeScript вместо пакета npm TypeScript.
В обозревателе решений щелкните правой кнопкой мыши узел проекта и выберите пункт "Изменить файл проекта".
Csproj-файл открывается в Visual Studio.
Добавьте следующие элементы в CSPROJ-файл в
PropertyGroupэлемент.В этом примере указывается Jest или Mocha в качестве тестовой платформы. Вместо этого можно указать Ленту или Jasmine.
Элемент
JavaScriptTestRootуказывает, что модульные тесты будут находиться в папке тестов корневого каталога проекта.<PropertyGroup> ... <JavaScriptTestRoot>tests\</JavaScriptTestRoot> <JavaScriptTestFramework>Jest</JavaScriptTestFramework> <GenerateProgramFile>false</GenerateProgramFile> </PropertyGroup>В обозревателе решений щелкните правой кнопкой мыши узел проекта ASP.NET Core и выберите "Добавить > новый элемент". Выберите файл конфигурации JSON TypeScript, а затем выберите Добавить.
Если вы не видите все шаблоны элементов, выберите показать все шаблоны, а затем выберите шаблон элемента.
Visual Studio добавляет файл tsconfig.json в корневой каталог проекта. Этот файл можно использовать для настройки параметров компилятора TypeScript.
Откройте 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.
Щелкните проект правой кнопкой мыши в обозревателе решений и выберите команду "Добавить>новый элемент " (или нажмите клавиши CTRL + SHIFT + A). Используйте поле поиска, чтобы найти файл npm, выберите файл конфигурации npm, используйте имя по умолчанию и нажмите кнопку "Добавить".
Файл package.json добавляется в корневой каталог проекта.
В обозревателе решений щелкните правой кнопкой мыши узел npm в разделе "Зависимости" и выберите " Установить новые пакеты npm".
Замечание
В некоторых сценариях обозреватель решений может не отображать узел npm из-за известной проблемы, описанной здесь. Если нужно просмотреть узел npm, вы можете выгрузить проект (щелкните проект правой кнопкой мыши и выберите " Выгрузить проект") и перезагрузите проект, чтобы сделать узел npm повторно отображаемым. Кроме того, можно добавить записи пакета в package.json и установить, создав проект.
Используйте диалоговое окно установки пакета npm, чтобы установить следующие пакеты npm:
В package.jsonдобавьте
testраздел в концеscriptsраздела:В обозревателе решений щелкните правой кнопкой мыши тестовую папку и выберите команду "Добавить>новый элемент", а затем добавьте новый файл с именем App.test.tsx.
При этом новый файл добавляется в тестовую папку.
Добавьте следующий код в App.test.tsx.
Откройте обозреватель тестов (выберите>обозреватель тестов>) и Visual Studio обнаруживает и отображает тесты. Если тесты не отображаются изначально, перестройте проект, чтобы обновить список. На следующем рисунке показан пример Jest с двумя разными файлами модульного теста.
Замечание
Для 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 с добавленным вторым модульным тестом.
Для некоторых платформ модульных тестов модульные тесты обычно выполняются в созданном коде 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_testsrun_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 в окне свойств задано для правильной платформы тестирования для файлов модульного теста. Это выполняется автоматически шаблонами файлов модульного теста.
Замечание
Параметры модульного теста будут принимать предпочтения по параметрам для отдельных файлов.
После открытия обозревателя тестов (выберите>обозреватель тестов>), 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 не удается найти, убедитесь, что вы открыли командную строку разработчика, а не обычную командную строку.