我们有一个用于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文件。
到目前为止,我们找到的最佳解决方案是:
然后我们可以通过两种方式在VS中运行测试:
我们还尝试将JS输出重定向到bin目录,这在VS中运行正常,但VS Team Services构建由于某种原因无法复制.js文件。
理想情况下,我们希望:
答案 0 :(得分:3)
我不知道这个答案是否仍与您相关,但对其他人也有用。好吧,让我们从TypeScript和Team Services开始。理想情况下,您只希望将TypeScript文件签入Team Services。 Team Services需要将TypeScript构建为JavaScript,只需添加相应项目的Visual Studio Build步骤即可实现。请注意,包含TypeScript的项目还在其csproj文件中获得了其他TypeScript设置。这也适用于您的单元测试。您应该在Team Services中将单元测试构建为常规JavaScript。
你需要做的第二件事就是正确设置测试环境。这意味着您必须下载2个扩展程序,即Chutzpah Test Adapter和Chutzpah 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测试版本和自定义测试适配器的路径。您应该插入以下值:
以.tests.js结尾的所有文件都标记为测试文件。
只有最新的Team Services测试版支持新的测试适配器。
这是您下载NuGet包的文件夹。 Chutzpah测试适配器位于此文件夹的子文件夹中。
这就是关于它的,希望这会有所帮助。