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

标签 typescript jasmine azure-devops chutzpah

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

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

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

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

  • 将 Chutzpah.json 设置为“始终复制”,以便它复制到 bin 目录
  • 将所有测试 .ts 文件设置为 TypeScriptCompile/Copy always
  • 始终将所有测试 .d.ts 文件设置为内​​容/复制(例如 Jasmine .d.ts)
  • 将应用程序项目中的所有 .ts 文件设置为 TypeScript 总是编译/复制
  • 更新测试文件依赖性以包含额外的 chutzpah_reference 对 bin 目录是正确的(使用 chutzpah_reference 意味着 VS 本地构建仍将完成 没有错误)

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

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

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

理想情况下,我们希望:

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

最佳答案

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

您必须做的第二件事是正确设置测试环境。这意味着您必须下载 2 个扩展,即 Chutzpah Test Adapter。和 Chutzpah Test Runner .这些扩展允许您运行(具有代码覆盖率)和调试您的单元测试。 Chutzpah 使用 PhantomJS作为运行单元测试的内存浏览器。那么这些扩展与团队服务无关。这些扩展仅适用于您的本地开发环境。那是个问题。我们可以通过安装 Chutzpah NuGet package 来解决这个问题.这个 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 测试适配器位于该文件夹的子文件夹中。

就是这样,希望对您有所帮助。

关于typescript - 用于在 Visual Studio 和 Visual Studio Team Services 构建中运行 TypeScript 测试的 Chutzpah 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588317/

相关文章:

azure - 从 yaml 管道中的变量组参数化 azureSubscription

azure - 如何从 Github 上完全删除 Azure-Pipelines

angular - Observable.zip 不是函数

Javascript 获取(此)行中特定表格单元格中的文本

javascript - 如何使用 Axios 和 Typescript 等待响应?

typescript - 使用 WebCrypto API 使用从字符串生成的加密 key 加密/解密数据

javascript - Ajax 未使用 Jasmine 执行

javascript - Jasmine:如何监视内部对象方法调用?

javascript - Jasmine toBeCloseTo 第二个参数是什么?

azure - 无法从 Azure 函数应用连接 Azure Database for PostgreSQL 服务器