我在 Node.Js Typescript 项目中使用 Jest 和 Visual Studio 2019,并且发生了一些我不明白的事情,我将不胜感激您提供一些指导,以便我了解发生了什么。
我在 Visual Studio 的 Node.js 项目中设置了 Jest。npm 软件包 jest、ts-jest 和 jest-editor-support 已安装。Typescript 文件在 VS 2019 中成功编译。
当我从命令行使用 Jest 时,所有测试都运行良好,无论是 .ts 文件中的测试还是编译后的 .js 文件中的测试,与我在 .ts 文件中设置的目标版本无关tsconfig.json。没问题。
然而,当我使用 Visual Studio 2019 测试资源管理器时,有 2 件奇怪的事情:
如果目标版本低于 中的“ES6” tsconfig.json,则构建失败,并且我看到babylon 解析器(由
)在和语句jest-editor-support上引发解析器错误
。foreachmap
即使使用“ES6”或更高版本的目标版本,当我使用 Jest 的 .each 函数时,包含这些函数的测试也无法正确运行。它们显示为“失败”,但在“测试详细信息摘要”窗口中,没有指向其他输出的链接。
由于 Jest 从命令行运行没有问题,这意味着通过 Visual Studio 2019 的测试资源管理器重新运行测试时会出现一些不同的情况。如何在测试资源管理器中以相同的方式成功运行测试?(没有明显发生的绕道巴比伦的情况)。我正在寻找测试资源管理器中失败的测试运行的解决方案,以及了解正在发生的情况。我对 Jest 还很陌生。
(顺便说一句,安装了 Jest / Typescript 的其他项目类型也会出现同样的问题)
对我来说,这是因为当测试资源管理器运行笑话测试时,它无法找到配置,即使jest.config.ts位于根目录的同一目录中。所以解决方案是将笑话配置移至我的package.json.
这是我的初始 package.json:
{
"name": "stackoverflow.tests.typescript",
"scripts": {
"test": "jest"
},
"devDependencies": {
"@types/jest": "^27.0.3",
"@types/jquery": "^3.5.9",
"jest": "^27.4.3",
"jest-editor-support": "^30.0.2",
"ts-jest": "^27.0.7",
"ts-node": "^10.4.0",
"typescript": "^4.5.2"
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我cd进入我的项目目录并运行时,npm run test它npm test效果很好。但在 Visual Studio 测试资源管理器中运行测试总是在 1 毫秒内失败。
当我像这样将笑话配置移动到 package.json 时,测试资源管理器能够成功运行我的测试,我认为这是因为它可以找到我的笑话配置:
{
"name": "stackoverflow.tests.typescript",
"scripts": {
"test": "jest --config jest.config.ts"
},
"devDependencies": {
"@types/jest": "^27.0.3",
"@types/jquery": "^3.5.9",
"jest": "^27.4.3",
"jest-editor-support": "^30.0.2",
"ts-jest": "^27.0.7",
"ts-node": "^10.4.0",
"typescript": "^4.5.2"
},
"jest": {
"preset": "ts-jest",
"testEnvironment": "jsdom",
"testPathIgnorePatterns": [
"/node_modules/"
],
"globals": {
"ts-jest": {
"tsconfig": "./tsconfig.json"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过修改我的命令来修改测试资源管理器在运行测试时使用的命令,.esproj但这不起作用:
<Project Sdk="Microsoft.VisualStudio.JavaScript.Sdk/0.4.0-alpha">
<PropertyGroup Label="Globals">
<ProjectGuid>a509059e-5633-4f18-b58a-15b11d6a91sq</ProjectGuid>
</PropertyGroup>
<PropertyGroup>
<JavaScriptTestRoot>tests\</JavaScriptTestRoot>
<JavaScriptTestFramework>Jest</JavaScriptTestFramework>
</PropertyGroup>
<ItemGroup>
<Script Include="**" Exclude="*.esproj;**\node_modules\**;*\*.js.map;*.js.map;bin\**;obj\**" />
</ItemGroup>
<Target Name="Restore">
<Exec Command="npm install --no-audit --no-fund --no-progress --include=dev" />
</Target>
<Target Name="VSTest">
<Exec Command="npm run test" /> <!-- Test explorer wouldn't run this command -->
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)