如何自动化Windows 8 HTML5应用程序的单元测试?

时间:2012-09-28 13:18:31

标签: html5 windows-8 windows-runtime winjs

我正在编写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来构建类似的东西?

1 个答案:

答案 0 :(得分: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/ - 它在项目中运行真正的应用程序,并在开发模式下为您提供上下文菜单,以运行您所在页面的测试。

我不是QUnit的粉丝,也不是QUnit-Metro在页面中工作的方式。但如果您不喜欢单独的项目,您可能会觉得它很合适。

希望有所帮助。