我们有一个用 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 中运行测试:
- 从 VS 测试运行器正常
- 通过显示所有文件,找到 bin/Tests 目录并右键单击并“运行 JS 测试”(这是一个很好的指标,表明测试将在 TFS 上正确运行,假设构建定义、CI 和 .runsettings 设置正确)。
我们还尝试将 JS 输出重定向到 bin 目录,这在 VS 中运行良好,但是 VS Team Services 构建由于某种原因无法复制 .js 文件。
理想情况下,我们希望:
- 避免必须将 .ts 文件复制到输出目录
- 以避免必须专门为 bin 目录添加额外的引用。
- 使用 Chutzpah 外部编译模式(因为 VS 已经编译了我们的 TypeScript)