4

我在 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 文件中的测试,与我在 .js 中设置的目标版本无关tsconfig.json。没有任何问题。

然而,当我使用 Visual Studio 2019 测试资源管理器时,有两件奇怪的事情:

  1. 使用低于“ES6”的目标版本tsconfig.json,构建失败,我看到巴比伦解析器(由 使用 )在和 语句jest-editor-support上引发解析器错误。foreachmap

  2. 即使使用“ES6”或更高版本的目标版本,当我使用 Jest 的 .each 函数时,包含这些函数的测试也无法正确运行。它们显示为“失败”,但在“测试详细信息摘要”窗口中,没有指向其他输出的链接。

由于 Jest 从命令行运行时没有问题,这意味着当测试通过 Visual Studio 2019 的测试资源管理器重新运行时会有所不同。如何让测试在测试资源管理器中以相同的方式成功运行?(没有明显发生的绕道巴比伦)。我正在寻找测试资源管理器中失败的测试运行的解决方案,以及了解正在发生的事情。我对 Jest 很陌生。

(顺便说一句,安装了 Jest / Typescript 的其他项目类型也会出现同样的问题)

4

1 回答 1

1

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

因此,当我cd进入我的项目目录并运行时npm run testnpm test它运行良好。但是在 Visual Studio 测试资源管理器中运行测试总是在 1 毫秒内失败。

当我像这样将我的 jest 配置移动到 package.json 时,测试资源管理器能够成功运行我的测试,我认为这是因为它可以找到我的 jest 配置:

{
  "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"
      }
    }
  }
}

我试图通过修改我的.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>
于 2022-01-05T17:18:35.143 回答