用于在 Visual Studio 和 Visual Studio Team Services 构建中运行 TypeScript 测试的 Chutzpah 配置

Nic*_*ker 5 jasmine chutzpah typescript azure-devops

我们有一个用 TypeScript 编写的 AngularJS 应用程序的 Visual Studio 2013 解决方案。Jasmine 单元测试有一个单独的测试项目,也是用 TypeScript 编写的。

我们遇到的问题是找到一个构建/Chutzpah 配置,它允许我们通过 Chutzpah 测试适配器在开发机器上运行测试,并且作为我们在 Visual Studio Team Services 上构建的 CI 的一部分。

当我们在开发机器上运行测试时,似乎默认情况下测试在源代码树中运行,因此对 .d.ts 和应用程序 .ts 文件的依赖关系是相对于源目录设置的。到现在为止还挺好。但是,当我们运行 Visual Studio Team Services 构建(按照此博客文章进行设置)时,测试似乎在 bin 目录中运行(查看 Visual Studio Team Services 日志)。这意味着依赖项的引用是错误的,因此测试失败,因为它们找不到所需的 .d.ts 或应用程序 .ts 文件。

到目前为止,我们找到的最佳解决方案是:

  • 将 Chutzpah.json 设置为“始终复制”,以便将其复制到 bin 目录
  • 始终将所有测试 .ts 文件设置为 TypeScriptCompile/Copy
  • 始终将所有测试 .d.ts 文件设置为 Content/Copy(例如 jasmine.d.ts)
  • 始终将应用程序项目中的所有 .ts 文件设置为 TypeScriptCompile/Copy
  • 更新测试文件依赖项以包含额外的 chutzpah_reference,这对于 bin 目录是正确的(使用 chutzpah_reference 意味着 VS 本地构建仍将完成而不会出错)

然后我们可以通过两种方式在 VS 中运行测试:

  1. 从 VS 测试运行器正常
  2. 通过显示所有文件,找到 bin/Tests 目录并右键单击并“运行 JS 测试”(这是一个很好的指标,表明测试将在 TFS 上正确运行,假设构建定义、CI 和 .runsettings 设置正确)。

我们还尝试将 JS 输出重定向到 bin 目录,这在 VS 中工作正常,但是由于某种原因,VS Team Services 构建无法复制 .js 文件。

理想情况下,我们希望:

  • 避免将 .ts 文件复制到输出目录
  • 以避免必须专门为 bin 目录添加额外的引用。
  • 使用 Chutzpah 编译模式外部(因为 VS 已经编译了我们的 TypeScript)

Dib*_*ran 4

我不知道这个答案是否仍然与您相关,但对其他人也有用。让我们从 TypeScript 和 Team Services 开始。理想情况下,您只希望将 TypeScript 文件签入 Team Services。Team Services 需要将 TypeScript 构建为 JavaScript,只需添加相应项目的 Visual Studio 构建步骤即可轻松实现。请注意,包含 TypeScript 的项目还在其 csproj 文件中获得了其他 TypeScript 设置。这也适用于您的单元测试。您应该在 Team Services 中将单元测试构建为常规 JavaScript。

您要做的第二件事是正确设置测试环境。这意味着您必须下载 2 个扩展,即Chutzpah Test AdapterChutzpah Test Runner。这些扩展允许您运行(带有代码覆盖率)和调试单元测试。Chutzpah 使用PhantomJS作为内存浏览器来运行单元测试。这些扩展与团队服务无关。这些扩展仅适用于您的本地开发环境。嗯,这是一个问题。我们可以通过安装Chutzpah NuGet 包来解决这个问题。此 NuGet 包将所有依赖项下载到您的包文件夹中,这意味着它会下载 PhantomJS,而且还会下载 QUnit、Jasmine 和代码覆盖率库。这意味着您不必再在项目中引用它们。只需从您的项目中删除它们即可。然后你可以添加chutzpah.json配置文件。在该文件中,您可以设置测试框架(jasmine、qunit 等)以及单元测试的引用文件。还有应该排除代码覆盖率的文件,主要是 jQuery 和 Angular 等库。完成后,您应该仍然能够在开发环境中运行单元测试,到目前为止一切顺利。我们没有在 Team Services 中为单元测试设置任何内容。

嗯,这就是最后一部分。在您的构建流程中,您应该添加一个额外的步骤来进行 JavaScript 单元测试。您无法将其与 .NET 单元测试合并,因为使用了不同的适配器,并且其他程序集也被引用为测试程序集。在该构建步骤中,您必须定义 3 件事,即测试程序集、VS 测试版本和自定义测试适配器的路径。您应该插入以下值:

  1. 测试程序集应该是:**\*.tests.js

所有以 .tests.js 结尾的文件都被标记为测试文件。

  1. VS 测试版本:最新

只有 Team Services 的最新测试版本支持新的测试适配器。

  1. 自定义测试适配器的路径:$(Build.SourcesDirectory)\packages

这是 NuGet 包下载到的文件夹。Chutzpah Test 适配器位于此文件夹的子文件夹中。

嗯,就是这样,希望这会有所帮助。