2011-12-07 33 views
3

我想爲我的視圖模型編寫單元測試,視圖模型對knockout.js有很大的依賴性。我也使用js.net從Visual Studio中的microsoft test runner運行qUnit測試。這樣當測試失敗時,我可以取消構建。knockout.js出瀏覽器測試和僞裝窗口

我可以得到簡單的測試運行,但只要我加載knockout.js我得到一個「ReferenceError:窗口沒有定義(knockout-1.3.0beta.js,第5行)」很明顯,窗口沒有定義當我沒有從瀏覽器運行測試時。但是,我只測試視圖模型,窗口交互與我的測試無關。無論如何,我可以「僞造」或「模擬」窗口,以便在無瀏覽器的環境中使用knockout.js。

+0

這是一個崇高的目標,我嘗試過使用[phantomjs](http://phantomjs.org),但放棄了最後的 – NickL

+0

@NickL我們去了淘汰賽的源代碼並逐一添加了文件,一些修改,但現在我們有它運行。基本上我們做了一個不依賴窗口的構建。 –

+0

我害怕修改源代碼只是爲了測試,因爲害怕破壞某些東西而沒有意識到。無窗口淘汰賽會很好,因爲我只想測試視圖模型邏輯,而不是DOM操作。幹得好雖然讓它工作!也許你可以發佈修改過的源代碼? – NickL

回答

0

我不太確定是否有捷徑解決方案,但通常在這種情況下您需要使用無頭瀏覽器進行測試。由於Knockoutjs與DOM和Events緊密集成,我希望你需要一個可以模擬整個瀏覽器結構的框架。

Zombie.js是其中之一。它需要Node.js進行設置,但非常出色。

0

您可以使用phantomJS和Jasmine的組合來測試KnockoutJS視圖模型。最終的結果是這樣的,其驚人的速度有多快幻影是:

$ phantomjs run_jasmine_test.coffee TestRunner.html 
Starting... 

Finished 
----------------- 
1 spec, 0 failures in 0.013s. 

ConsoleReporter finished 

的基本步驟:

  • 使用Jasmine,寫規範爲您的代碼
  • 創建一個測試運行文件,爲每個規範文件添加行
  • 運行phantomJS並指示它讀取測試運行器。

有關更多詳情和分步說明,請查看我最近編寫的blog post