天天看點

Nodejs測試:從0到90(實踐篇)

繼上一篇理論,本篇重點說明實踐,包括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>

繼續閱讀