繼上一篇理論,本篇重點說明實踐,包括nodejs中異步、promises、私有方法、mock及web等的測試方法。
以下示例均基于mocha.
在異步操作完成時,調用回調(通常是 <code>done</code>) 即可。
mocha的逾時設定預設是2s,如果執行的測試超過2s的話,就會報timeout錯誤。可以修改逾時時間,有兩種方法:
指令行式
api式
一般測試隻測試接口或公共方法,并不直接測試私有方法。但是如果當私有方法特别多且複雜時,測試私有方法比測試接口或公共方法更直接、有效。
嚴格上講,javascript并沒有私有方法的概念,這裡所讨論的私有方法指未被導出(<code>exports</code>)的方法。
一個簡單的盒子,在一個 <code>cal.js</code> 裡有一個 <code>add</code> 方法,如下所示:
rewire adds a special setter and getter to modules so you can modify their behaviour for better unit testing.
擷取上面的私有方法,并測試:
除了擷取私有方法,<code>rewire</code> 還可以設定私有變量或方法, 以便測試。
比如有這樣一個子產品,
設定并擷取私有變量。
還可以用作mock。
需要測試的方法:
spy
stubs
mocks
持續內建(ci, continuous integration)是一種軟體開發實踐,即團隊開發成員經常內建它們的工作。每次內建都通過自動化的建構(包括編譯,釋出,自動化測試)來驗證,進而盡早地發現內建錯誤。
代碼風格檢查同樣也可以內建到 ci,隻需要在 <code>ci</code> 指令前追加檢查指令即可。以 eslint 為例:
此時建構會先做代碼風格檢查,再做單元測試、覆寫率統計,如代碼風格檢查失敗,會直接導緻建構中斷。
原本計劃寫一個nodejs的測試參考,幫助還不太了解nodejs測試的同學快速入門,在寫的過程中才發現,需要的東西太多,而自己又知道的太少。雖然在一個應用的測試中覆寫率達到了90%,但并不代碼在測試方面可以拿到90分。
正如前面寫到的,”剩下的10,還有很長的路“,甚至比從0到90更長,唯有不斷的學習才能進一步提升,希望自己還能再寫個下篇《nodejs測試:從90到100》。
<a href="http://mochajs.org/">mocha</a>
<a href="http://qunitjs.com/">qunit</a>
<a href="http://jasmine.github.io/">jasmine</a>
<a href="http://karma-runner.github.io/0.12/index.html">karma</a>
<a href="http://stackoverflow.com/questions/300855/javascript-unit-test-tools-for-tdd">javascript unit test tools for tdd</a>
<a href="http://joshldavis.com/2013/05/27/difference-between-tdd-and-bdd/">the difference between tdd and bdd</a>
<a href="https://www.sitepoint.com/comparison-javascript-linting-tools/">a comparison of javascript linting tools</a>