## 目標
無明確目標
## [](https://github.com/alsotang/node-lessons/tree/master/lesson13#知識點)知識點
1. 學習使用 travis-ci 對項目進行持續集成測試 ([https://travis-ci.org/](https://travis-ci.org/)?)
## [](https://github.com/alsotang/node-lessons/tree/master/lesson13#課程內容)課程內容
首先來看看這個項目:[https://github.com/Ricardo-Li/node-practice-3](https://github.com/Ricardo-Li/node-practice-3)
[](https://github.com/alsotang/node-lessons/blob/master/lesson13/1.png)
(圖1)
類似這樣的 badges,在很多項目中都可以看到。前者是告訴我們,這個項目的測試目前是通過的;后者是告訴我們,這個測試的行覆蓋率是多少。行覆蓋率當然是越多越好。測試的重要性我就不說了。
為什么要使用 travis 這樣的平臺,是因為它可以讓你明白自己的項目在一個“空白環境”中,是否能正確運行;也可以讓你知道,用不同的 Node.js 版本運行的話,有沒有兼容性問題。
當你在自己的機器上跑測試的時候,你用著特定的 Node.js 版本,比如 0.10,如果測試過了,你也還是不懂在 0.11 下,你的測試能不能通過。你可以手動地切換 node 版本再跑一次,也可以選擇讓 travis 幫你把不同的 node 版本跑一次。而且有時候,我們 npm 安裝了某個包,但卻忘記將它寫入 package.json 里面了,在自己的機器上,測試沒問題,但當別的用戶安裝你的包時,會發現有依賴缺失。
travis 應該是把虛擬機的技術玩得比較好,它每次跑測試時,都會提供一個空白的環境。這個環境只有 Linux 基本的`build-essential`?和?`wget`、`git`?那些依賴。連 Node.js 的運行時都是現跑現安裝的。
travis 默認帶有的那些依賴,都是每個用戶的機器上都會有的,所以一旦你的應用在 travis 上面能夠跑通,那么就不用擔心別的用戶安裝不上了。
我們來講講接入 travis 的步驟。
travis 的價格是免費的,對于 github 上的開源項目來說。它默認當然不可能幫 github 的每個用戶都跑測試,所以你需要去注冊一下 travis,然后告訴它你需要開啟集成測試的倉庫。
[](https://github.com/alsotang/node-lessons/blob/master/lesson13/2.png)
比如上圖,可以看到我幫自己的?`alsohosts`?項目以及?`adsf`?項目開啟了測試。
當你在 travis 授權了倉庫之后,每當你 push 代碼到 github,travis 都會自動幫你跑測試。
travis 通過授權,可以知道你的項目在什么地方,于是它就可以把項目 clone 過去。但問題又來了,它不懂你的測試怎么跑啊。用?`npm test`?還是?`make test`?還是?`jake test`?呢?
所以我們需要給出一些配置信息,配置信息以?`.travis.yml`?文件的形式放在項目根目錄,比如一個簡單的`.travis.yml`。
~~~
language: node_js
node_js:
- '0.8'
- '0.10'
- '0.11'
script: make test
~~~
這個文件傳遞的信息是:
* 這是一個 node.js 應用
* 這個測試需要用 0.8、0.10 以及 0.11 三個版本來跑
* 跑測試的命令是?`make test`
將這個文件添加到項目的根目錄下,再 push 上 github,這時候 travis 就會被觸發了。
travis 接著會做的事情是:
1. 安裝一個 node.js 運行時。由于我們指定了三個不同版本,于是 travis 會使用三個機器,分別安裝三個版本的 node.js
2. 這些機器在完成運行時安裝后,會進入項目目錄執行?`npm install`?來安裝依賴。
3. 當依賴安裝完成后,執行我們指定的 script,在這里也就是?`make test`
如果測試通過的話,make 命令的返回碼會是 0(如果不懂什么是返回碼,則需要補補 shell 的知識),則測試通過;如果測試有不通過的 case,則返回碼不會為 0,travis 則判斷測試失敗。
每一個 travis 上面的項目,都可以得到一個圖片地址,這個地址上的圖片會顯示你項目當前的測試通過狀態,把這個圖片添加到自己項目的 README 中,就可以得到我們圖1的那種逼格了。
對了,行覆蓋率的那個 badge 是由一個叫 coveralls([https://coveralls.io/](https://coveralls.io/)?) 的服務提供的。大家可以試著自己接入。
## [](https://github.com/alsotang/node-lessons/tree/master/lesson13#補充說明)補充說明:
如果你的應用有使用到數據庫, 需要在?`.travis.yml`?中添加一些內容.
以 MongoDB 為例:
~~~
services:
mongodb
~~~
其它數據庫詳細內容參考[travis 官方文檔](http://docs.travis-ci.com/user/database-setup/)
- 關于
- Lesson 0: 《搭建 Node.js 開發環境》
- Lesson 1: 《一個最簡單的 express 應用》
- Lesson 2: 《學習使用外部模塊》
- Lesson 3: 《使用 superagent 與 cheerio 完成簡單爬蟲》
- Lesson 4: 《使用 eventproxy 控制并發》
- Lesson 5: 《使用 async 控制并發》
- Lesson 6: 《測試用例:mocha,should,istanbul》
- Lesson 7: 《瀏覽器端測試:mocha,chai,phantomjs》
- Lesson 8: 《測試用例:supertest》
- Lesson 9: 《正則表達式》
- Lesson 10: 《benchmark 怎么寫》
- Lesson 11: 《作用域與閉包:this,var,(function () {})》
- Lesson 12: 《線上部署:heroku》
- Lesson 13: 《持續集成平臺:travis》
- Lesson 14: 《js 中的那些最佳實踐》
- Lesson 15: 《Mongodb 與 Mongoose 的使用》
- Lesson 16: 《cookie 與 session》
- Lesson 17: 《使用 promise 替代回調函數》