명령 프롬프트로 전환할 필요 없이 인기 있는 JavaScript 프레임워크 중 일부를 사용하여 Visual Studio에서 단위 테스트를 작성하고 실행할 수 있습니다. Node.js 및 ASP.NET Core 프로젝트가 모두 지원됩니다.
지원되는 프레임워크는 다음과 같습니다.
- 모차(mochajs.org)
- 재스민 (Jasmine.github.io)
- 테이프(github.com/substack/tape)
- Jest(jestjs.io)
- Vitest(vitest.dev)
지원되는 프레임워크는 다음과 같습니다.
- 모차(mochajs.org)
- 재스민 (Jasmine.github.io)
- 테이프(github.com/substack/tape)
- Jest(jestjs.io)
즐겨 찾는 프레임워크가 지원되지 않는 경우 지원 추가에 대한 자세한 내용은 단위 테스트 프레임워크 에 대한 지원 추가를 참조하세요.
CLI 기반 프로젝트에 대한 단위 테스트 작성(.esproj)
Visual Studio 2022에서 지원되는 CLI 기반 프로젝트는 테스트 탐색기에서 작동합니다. Vitest는 React 및 Vue 프로젝트(이전의 Jest)에 대한 기본 제공 테스트 프레임워크이며, Karma 및 Jasmine은 Angular 프로젝트에 사용됩니다. 기본적으로 각 프레임워크에서 제공하는 기본 테스트와 작성하는 추가 테스트를 실행할 수 있습니다. 테스트 탐색기에서 실행 단추를 누릅니다. 테스트 탐색기가 아직 열려 있지 않은 경우 메뉴 모음에서 테스트>테스트 탐색기를 선택하여 찾을 수 있습니다.
명령줄에서 단위 테스트를 실행하려면 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 터미널에서 열기를 선택한 다음 테스트 유형과 관련된 명령을 실행합니다.
단위 테스트 설정에 대한 자세한 내용은 다음을 참조하세요.
간단한 예제도 여기에 제공됩니다. 그러나 전체 정보는 위의 링크를 사용합니다.
단위 테스트 추가(.esproj)
다음 예제는 독립 실행형 TypeScript React 프로젝트 템플릿인 Visual Studio 2022 버전 17.12 이상에서 제공되는 TypeScript React 프로젝트 템플릿을 기반으로 합니다. Vue 및 Angular의 경우 단계는 비슷합니다.
솔루션 탐색기에서 React 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택합니다.
값이 표시된 .esproj 파일에 다음 속성이 있는지 확인합니다.
<PropertyGroup> <JavaScriptTestRoot>src\</JavaScriptTestRoot> <JavaScriptTestFramework>Vitest</JavaScriptTestFramework> </PropertyGroup>이 예제에서는 테스트 프레임워크로 Vitest를 지정합니다. 대신 모카, 테이프, 재스민 또는 제스트를 지정할 수 있습니다.
요소는
JavaScriptTestRoot단위 테스트가 프로젝트 루트 의 src 폴더에 있도록 지정합니다. 테스트 폴더를 지정하는 것도 일반적입니다.솔루션 탐색기에서 npm 노드를 마우스 오른쪽 단추로 클릭하고 새 npm 패키지 설치를 선택합니다.
npm 패키지 설치 대화 상자를 사용하여 다음 npm 패키지를 설치합니다.
- vitest
이 패키지는 종속성에서 package.json 파일에 추가됩니다.
비고
jest를 사용하는 경우 jest-editor-support npm 패키지와 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옵션을 사용하지 마세요. 이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 사용해 보세요.
비고
프로파일링 테스트 및 코드 검사는 현재 지원되지 않습니다.
CLI 기반 프로젝트(.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에 대한 단위 테스트 작성
ASP.NET Core 프로젝트에서 JavaScript 및 TypeScript의 단위 테스트에 대한 지원을 추가하려면 필요한 NuGet 패키지를 포함하여 TypeScript, npm 및 단위 테스트 지원을 프로젝트에 추가해야 합니다.
단위 테스트 추가(ASP.NET Core)
다음 예제는 ASP.NET Core Model-View-Controller 프로젝트 템플릿을 기반으로 하며 Jest 또는 Mocha 단위 테스트 추가를 포함합니다.
ASP.NET 핵심 모델View-Controller 프로젝트를 만듭니다.
예제 프로젝트는 기존 ASP.NET Core 앱에 TypeScript 추가를 참조하세요. 단위 테스트 지원을 위해 표준 ASP.NET Core 프로젝트 템플릿으로 시작하는 것이 좋습니다.
솔루션 탐색기(오른쪽 창)에서 ASP.NET Core 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 솔루션용 NuGet 패키지 관리를 선택합니다.
찾아보기 탭에서 다음 패키지를 검색하고 각각을 설치합니다.
NuGet 패키지를 사용하여 npm TypeScript 패키지 대신 TypeScript 지원을 추가합니다.
솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택합니다.
.csproj 파일이 Visual Studio에서 열립니다.
요소의 .csproj 파일에
PropertyGroup다음 요소를 추가합니다.이 예제에서는 Jest 또는 Mocha를 테스트 프레임워크로 지정합니다. 대신 테이프 또는 재스민을 지정할 수 있습니다.
솔루션 탐색기에서 ASP.NET Core 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 새 항목 추가>를 선택합니다. TypeScript JSON 구성 파일선택한 다음 추가를 선택합니다.
모든 항목 템플릿이 표시되지 않으면 모든 템플릿 표시를 선택한 다음 항목 템플릿을 선택합니다.
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 코드를 넣을 수 있는 위치입니다. 코드를 추가하는 예제 프로젝트는 기존 ASP.NET Core 앱에 TypeScript 추가를 참조하세요.
솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고새 항목>를 선택하거나 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에 다음 코드를 추가합니다.
테스트 탐색기를 열고( 테스트>Windows>테스트 탐색기 선택) Visual Studio에서 테스트를 검색하고 표시합니다. 테스트가 처음에 표시되지 않는 경우 프로젝트를 다시 빌드하여 목록을 새로 고칩니다. 다음 그림에서는 두 개의 서로 다른 단위 테스트 파일이 있는 Jest 예제를 보여 줍니다.
비고
TypeScript의 경우 테스트 탐색기가 단위 테스트를 찾을 수 없으므로
outfile옵션을 사용하지 마세요. 이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
ASP.NET Core 프로젝트에 폴더가 NodeJsTools 표시되지 않으면 Visual Studio 설치 관리자를 사용하여 Node.js 개발 워크로드를 추가합니다. 이 워크로드에는 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 Core 프로젝트에서만 단위 테스트를 작성하는 것으로 제한되지 않습니다. 모든 C# 또는 Visual Basic 프로젝트에 TestFramework 및 TestRoot 속성을 추가하면 해당 테스트가 열거되고 테스트 탐색기 창을 사용하여 실행할 수 있습니다.
이를 사용하도록 설정하려면 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 언로드를 선택한 다음 프로젝트 편집을 선택합니다. 그런 다음 프로젝트 파일에서 속성 그룹에 다음 두 요소를 추가합니다.
중요합니다
요소를 추가하는 속성 그룹에 지정된 조건이 없는지 확인합니다. 이로 인해 예기치 않은 동작이 발생할 수 있습니다.
<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에는 jest-editor-support npm 패키지가 필요합니다. 필요한 경우 특정 프레임워크에 대한 설명서를 확인합니다.
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");
})
})
프로젝트 속성에서 단위 테스트 옵션을 설정하지 않은 경우 속성 창의 테스트 프레임워크 속성이 단위 테스트 파일에 대한 올바른 테스트 프레임워크로 설정되어 있는지 확인해야 합니다. 이 작업은 단위 테스트 파일 템플릿에 의해 자동으로 수행됩니다.
비고
단위 테스트 옵션은 개별 파일의 설정보다 우선합니다.
테스트 탐색기를 연 후( 테스트>Windows>테스트 탐색기 선택) Visual Studio에서 테스트를 검색하고 표시합니다. 테스트가 처음에 표시되지 않는 경우 프로젝트를 다시 빌드하여 목록을 새로 고칩니다.
비고
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 찾을 수 없음을 나타내는 오류가 발생하는 경우 일반 명령 프롬프트가 아닌 개발자 명령 프롬프트를 열었는지 확인합니다.