2011-08-22 66 views
4

我一直在嘗試不同的JS單元測試庫,但我仍然不知道這樣做的正確方法是什麼。如何在JavaScript中進行單元測試? (正確的方式)

這個問題有什麼共識嗎?例如,我試着用QUnit(jQuery使用的單元測試庫)編寫模式窗口庫的一些測試,但它必須在瀏覽器中運行,並且它不會隱藏效果, m測試或其他令人討厭的事情(我甚至不知道js中是否可能)。在服務器端語言中,測試套件生成的任何輸出都會發送到緩衝區,並在每次測試後丟棄。

如果在js單元測試中不能封裝警報,DOM操作和類似的東西,是否正在編寫值得用這種語言進行的測試?

+0

您嘗試過QUnit以外的其他庫嗎? –

+0

也許你可以在https://github.com/bebraw/jswiki/wiki/Testing-frameworks找到一些合適的解決方案。有很多框架可供選擇。 –

回答

1

如果你真的被DOM改變和其他效果(警告,提示)所困擾,你可以使用模擬和間諜來確保這些改變是有意的。

請參閱Jasmine包含嘲諷和間諜活動的BDD或針對獨立庫的SinonJS

然後,你可以寫這樣的(使用興農)測試:

var mock = sinon.mock(window); 
mock.expects("alert").once().withExactArgs("foo"); 

alert("foo"); 

mock.verify(); 
+0

謝謝,但我不喜歡將測試綁定到特定實現的想法。假設用於調用警報的方法現在不是。我將不得不重新編寫測試以刪除期望('alert')。無論如何,這是太多的工作。 – HappyDeveloper

+0

是的,這是測試中嘲笑的特殊缺陷。我同意這是相當冗長的。 –

+2

@HappyDeveloper進行單元測試的重點是聲明一個行爲。如果您從主生產代碼中刪除了「alert」,並且由於失敗而被迫重新編寫測試,那麼您已經正確編寫了測試!這是一件好事!它會通知您對您行爲的改變,從而允許您更正代碼或測試(取決於哪個是錯誤的)。這是單元測試和測試驅動開發的重點。 – jamiebarrow

4

測試前端代碼(HTML,CSS,JavaScript的)不是一項容易的任務主要是由於需要視覺跨瀏覽器問題測試例如。確保元素在所有瀏覽器中正確定位。

爲了測試您的JavaScript代碼,您需要以「可測試」的方式編寫它。我個人發現這篇博客文章非常有幫助:http://www.adequatelygood.com/2010/7/Writing-Testable-JavaScript

至於實際的測試嘗試結合QUnit(你已經使用)和http://funcunit.com/。 FuncUnit允許你打開一個html頁面並在其dom上運行測試。在家裏有一個例子顯示它是如何完成的。