組裏正在作SaaS產品,其中一些模塊(Module)是Node.js實現,這裏咱們主要使用Node.js實現Web Server來提供服務。node
在作SaaS項目以前,組裏的開發模式是傳統的Deverloper + QA的模式,這是傳統的協做模式,Developer負責寫代碼開發,固然也會有基本的自測,QA負責測試,遇到問題,提Bug給Developer去修復,Developer修復Bug後,由QA來驗證並記錄Bug。但這樣的協做模式已不適合SaaS產品的開發,SaaS產品更新迭代快,模塊衆多,這就要求要轉變模式。Developer要負責自身模塊更多的測試,單元測試要覆蓋全。僅有少許的QA會負責集成測試。git
由此更多的模塊質量要求Developer來保證。github
由於我恰好參與其中的Node.js模塊,由於我小結了一些目前Node.js模塊開發時如何自測。正則表達式
建議在項目目錄中,新建爲"test"的文件夾,存放測試用的腳本和數據。安全
主要有三,以下。curl
一. 假數據(Mock Data)和寫測試腳本(Script)async
Node.js作Server,一般要依賴其餘模塊,來獲取數據或服務等。若是你作的模塊OK了,但別人的模塊每每不必定徹底OK。因此接口十分重要。所以能夠寫一些腳原本自測,同時須要的其餘模塊數據,能夠本身製造些假數據,放在JSON文件中,來調用。編輯器
腳本能夠是JS或Bash腳本等,根據實際。工具
有了腳本和數據,就能夠來測試本身的模塊,測試接口是否OK等。性能
二. Benchmark
在Node.js中,有一個NPM模塊很流行,叫benchmark,它的做用是用來作性能分析和測試。它的GitHub官網是:https://github.com/bestiejs/benchmark.js。
它的使用場景,例如你有幾種方法來實現同一個功能,但你又不知道哪一種性能更好。它即可以幫你分析。
例以下面官方提供的示例。
1 var suite = new Benchmark.Suite; 2 3 // add tests 4 suite.add('RegExp#test', function() { 5 /o/.test('Hello World!'); 6 }) 7 .add('String#indexOf', function() { 8 'Hello World!'.indexOf('o') > -1; 9 }) 10 // add listeners 11 .on('cycle', function(event) { 12 console.log(String(event.target)); 13 }) 14 .on('complete', function() { 15 console.log('Fastest is ' + this.filter('fastest').pluck('name')); 16 }) 17 // run async 18 .run({ 'async': true }); 19 20 // logs: 21 // => RegExp#test x 4,161,532 +-0.99% (59 cycles) 22 // => String#indexOf x 6,139,623 +-1.00% (131 cycles) 23 // => Fastest is String#indexOf
在這個測試例子中,分析比較了用正則表達式仍是indeOf哪一種方法的性能更高。最終indexOf勝出。
所以Benchmark在Node.js模塊中建議使用,用來作性能測試。
三. JSHint - 一款Javascript代碼分析工具
這個工具很經常使用,每次寫完Javascript的代碼,就能夠經過這個工具來掃描下代碼,若是有錯誤(Error)或者警告(Warning)提示,就能夠用來發現代碼中的問題和可優化的地方,可及時修改。
同時JSHint提供對文本編輯器插件的各類支持,像我用的Vim就配置了JSHint,每次開發完,直接輸入命令:JSHint,很好用,推薦。
同時建議在Javascript代碼文件首行增長"user strict;",這樣是默認使用嚴格模式,更安全,更嚴謹。例以下例。
1 /* jshint strict: true, undef:true, unused:true, latedef: true, newcap: true, noempty: true, forin: true, 2 freeze: true, node: true, curly:true, camelcase: true */ 3 "use strict";
JSHint官網:http://jshint.com/
目前根據本身的經驗,只總結出以上三點。後面若是有更多的實踐和總結,會及時更新在這裏。謝謝
Kevin Song
2015-5-28