2012-09-28 32 views
7

我在寫一個Windows 8應用程序,併爲它編寫單元測試。我如何在Windows 8環境中以自動化的方式運行它們?如何自動化Windows 8 HTML5應用程序的單元測試?

如果我編寫超級簡單的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來構建類似的東西?

回答

10

目前沒有辦法以無頭方式運行Win8/WinJS測試套件。 WinJS應用程序所需的運行時無法獨立運行,無需運行完整的WinJS應用程序。

運行測試IME的最好方法是在解決方案中創建一個單獨的WinJS項目來運行測試。

克里斯托弗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在頁面中工作的方式。但是如果你不喜歡單獨的項目,你可能會覺得它合適。

希望有所幫助。