Jest测试通过CLI运行,但通过Visual Studio 2019测试资源管理器失败。

4
我正在一个Node.js Typescript项目中使用Visual Studio 2019和Jest,但有一些问题让我无法理解,希望得到指导以理解发生了什么。
我已经在Visual Studio的Node.js项目中设置了Jest。已安装npm包jest、ts-jest和jest-editor-support。Typescript文件可以在VS 2019中成功编译。
当我从命令行使用Jest时,所有测试都能正常运行,无论是.ts文件中的还是编译后的.js文件中的测试,而且不受我在tsconfig.json中设置的目标版本的影响。没有任何问题。
然而,当我使用Visual Studio 2019的Test Explorer时,出现了两个奇怪的问题:
1.在tsconfig.json中将目标版本设为低于“ES6”的版本时,构建失败,并且我看到Babylon解析器(被jest-editor-support使用)对foreachmap语句抛出了解析器错误。
2.即使将目标版本设置为“ES6”或更高版本,当我使用Jest的.each函数时,包含这些函数的测试并未正确运行。它们被显示为“失败”,但在测试详细信息摘要窗口中,没有链接到其他输出。
由于Jest在命令行下可以正常运行,这意味着在通过Visual Studio 2019的测试资源管理器运行测试时,存在某些不同之处。我该如何让测试在测试资源管理器中以相同的方式成功运行?(避免显然会发生的Babylon解析问题)。我正在寻找解决测试失败问题的方法,并希望理解发生了什么。我对Jest还比较陌生。
(顺便说一下,在安装了Jest / Typescript的其他项目类型中也出现了同样的问题)

你找到解决方案了吗?我也遇到了同样的问题。 - Timmo
@Timmo刚刚将所有软件包都升级到最新版本,包括TS和Jest。不幸的是,问题仍然存在。 - DhyMik
我对这个downvote的原因很感兴趣,因为我经过了相当多的研究和努力,真诚地提出了一个问题。 - DhyMik
我曾经遇到过类似的问题,但那不是Node.js项目。只是在asp net core项目中进行的简单测试,在cmd中通过了,但在Test Explorer中总是失败。在我的情况下,问题出在测试名称上——我使用了西里尔文,重命名后一切正常。我相信你使用英语进行命名,但是......谁知道呢。 - Юрий Алексеев
1个回答

1

对于我来说,问题出在Test Explorer运行jest测试时无法找到配置文件,即使jest.config.ts与根目录下的同一目录中。所以解决方案是将jest配置文件移动到我的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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接