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

时间:2014-10-27 13:09:00

标签: typescript jasmine azure-devops chutzpah

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

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

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

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

  • 让Chutzpah.json设置为'始终复制'所以它复制到bin dir
  • 将所有测试.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上正确运行,假设构建def,CI& .runsettings 正确设置)。
  3. 我们还尝试将JS输出重定向到bin目录,这在VS中运行正常,但VS Team Services构建由于某种原因无法复制.js文件。

    理想情况下,我们希望:

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

1 个答案:

答案 0 :(得分:3)

我不知道这个答案是否仍与您相关,但对其他人也有用。好吧,让我们从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 package来解决这个问题。这个NuGet包将所有依赖项下载到你的包文件夹中,这意味着它下载了PhantomJS,还有下载了QUnit,Jasmine和代码覆盖库。这意味着您不必再在项目中引用它们了。只需从项目中删除它们即可。然后,您可以添加chutzpah.json配置文件。在该文件中,您可以设置测试框架(jasmine,qunit等)以及单元测试的引用文件。但也应该排除代码覆盖率的文件,主要是你的库,如jQuery和Angular。当你完成后,你仍然可以在你的开发环境中运行你的单元测试,到目前为止一切都很好。我们没有在Team Services中为单元测试设置任何东西。

那就是最后一部分。在构建流程中,您应该为JavaScript单元测试添加附加步骤。您不能将其与.NET单元测试合并,因为使用了不同的适配器,其他程序集也被引用为测试程序集。在该构建步骤中,您需要定义3个内容,即测试程序集,VS测试版本和自定义测试适配器的路径。您应该插入以下值:

  1. 测试组件应为:** \ * .tests.js
  2. 以.tests.js结尾的所有文件都标记为测试文件。

    1. VS测试版:最新
    2. 只有最新的Team Services测试版支持新的测试适配器。

      1. 自定义测试适配器的路径:$(Build.SourcesDirectory)\ packages
      2. 这是您下载NuGet包的文件夹。 Chutzpah测试适配器位于此文件夹的子文件夹中。

        这就是关于它的,希望这会有所帮助。