5

我们有一个用 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
  • 更新测试文件依赖项以包含对 bin dir 正确的附加 chutzpah_reference(使用 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)
4

1 回答 1

4

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

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

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

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

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

  1. VS 测试版本:最新

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

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

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

好吧,这就是它,希望这会有所帮助。

于 2015-10-23T06:29:26.730 回答