寫點測試
<blockquote cite="https://vinta.ws/blog/695"> 信奉 Test-Driven Development 的工程師鄙視先寫 code 再補 tests 的工程師,先寫 code 再補 tests 的工程師鄙視不寫 tests 的工程師,不寫 tests 的工程師鄙視又他媽亂改需求的 PM。 </blockquote>
測試的理由,是確保程式碼照著一定的規範走。而規範,就是俗稱的 spec:程式要有什麼功能,就得從需求演化為規範,再從規範變成測試用例。
通常,我們會先寫程式,再測試之。但也有人想到:何不先寫規範與測試程式,再想辦法把程式寫進去?<br /> 而這個想法,就變成了 Test-Driven Development:
- 首先,我先寫一個測試程式,測試程式會寫好規範,以完成需求。當然,也要能呼叫要主程式。
- 運行這個測試程式。由於主程式並不存在,結果當然失敗。
- 試著撰寫主程式,想辦法讓測試程式通過。
- 當你寫到最後,發現測試程式全部完成,你就成功了。
前端測試比較麻煩的是:瀏覽器是個圖形介面,所以很多前端的問題,其實程式測不了......不過看完 Ruby on Rails 的測試寫法,我想依舊可以寫些最簡單的測試。
那就開始吧。
準備
如果需要寫測試,你需要一個測試框架,還有一個斷言函式庫。我這裡用的是 Mocha + Assert。
開始
describe('Novel', function()
{
describe('Add', function()
{
it('Should add chapter at last chapter when adding', function()
{
let novel = new Novel([1,2,3,4,5,6,7,8,9,10]);
assert.deepEqual( [1,2,3,4,5,6,7,8,9,10,11] , novel.add() );
});
});
});
這是最簡單的測試了。我們需要 Novel
程式,裡面有個 Add
方法,接著寫了需要的功能,還有相對應的測試程式。寫好了,就去跑 npm test
測試程式。
於是:
function Novel( current_chapter )
{ // Code
this.add = () =>
{
let tmp_ary = current_chapter.sort( (x,y) => x - y );
let new_array = Array.from(tmp_ary);
let tmp_num = tmp_ary[ tmp_ary.length - 1 ] + 1;
new_array.push( tmp_num );
return new_array;
}
}
我寫了程式,接著又用 npm test
跑測試。
感想嗎?<br /> 我很累。沒想到這麼累。