7

我正在编写一个 Windows 8 应用程序,并为它编写单元测试。如何在 Windows 8 环境中以自动化方式运行它们?

如果我编写超级简单的 JavaScript 文件,不依赖于 Windows 8 环境或 DOM,我可以使用 Node.js 从命令行对它们进行单元测试。这非常快(不到一秒)。

如果我需要涉及 DOM,并且我将 DOM 的使用保持在不太新的功能上,我可以在 Node.js 中使用 jsdom 并获得相同的设置和相同的速度。

但是 jsdom 是不完整的,而且我经常想使用基本的 Windows 8 功能,如 WinJS 基础库(例如WinJS.Promise)或Windows.*枚举。理想情况下,我应该在与我的应用程序实际运行时相同的 JS 引擎和 DOM 环境中进行测试。

因此,理想情况下,我需要一个测试运行程序:一个轻量级的 Windows 8 HTML5 容器,它可以使用真实的 DOM 运行一些单元测试,并可以访问 WinJS 和 Windows 运行时 API。为了集成到构建过程中,我还需要能够将结果报告回命令行(stdout、stderr)并根据成功或失败更改测试运行器的返回代码。它应该是完全自动化的,可以在后台运行,而且速度非常快(不到 10 秒)。

我知道 WebKit 有这样的工具,例如PhantomJS。Windows 运行时 HTML5 环境是否存在这种情况?如果没有,我应该研究哪些 API 来构建类似的东西?

4

1 回答 1

10

目前没有办法以无头方式运行 Win8/WinJS 测试套件。WinJS 应用程序所需的运行时不能独立运行,除非运行完整的 WinJS 应用程序。

运行测试(IME)的最佳方式是在您的解决方案中创建一个单独的 WinJS 项目来运行您的测试。

Christopher Bennage 有一篇博客文章描述了基本设置,这里是:http ://dev.bennage.com/blog/2012/08/15/unit-testing-winjs/

我有一些博客文章更进一步:

http://lostechies.com/derickbailey/category/winjs/

http://lostechies.com/derickbailey/2012/08/17/asynchronous-unit-tests-with-mocha-promises-and-winjs/

http://lostechies.com/derickbailey/2012/08/21/a-winjs-specrunner-automating-script-tag-insertion-for-unit-tests/

如果您不喜欢为测试运行单独项目的想法,或者如果您想要 QUnit 而不是 Jasmine 或 Mocha,请查看 QUnit-Metro:http://qunitmetro.github.com/QUnitMetro/ -它运行在-project 与您的真实应用程序,并在开发模式下为您提供一个上下文菜单来运行您所在页面的测试。

我不喜欢 QUnit 或 QUnit-Metro 在页面中的工作方式。但如果您不喜欢单独的项目,您可能会发现它很合适。

希望有帮助。

于 2012-09-28T13:50:15.317 回答