來試試看Travis CI的服務-- CI, Mocha, Chai and Node.js

References:
1. http://visionmedia.github.io/mocha/
2. https://travis-ci.org/
3. http://josephj.com/entry.php?id=251
4. http://martinfowler.com/articles/continuousIntegration.html
5. http://blog.pluralsight.com/2012/09/11/tdd-vs-bdd/
6. http://jenkins-ci.org/
7. http://chaijs.com/ 

1. 概述
     
      這篇文章主要是來紀錄我如何去使用CI( Continuous Intergration),什麼是 CI 呢?
可以參考ref. 3跟4, CI簡單來說就是將軟體開發每天會做的事整合起並且自動化,每個
整合至少會包含自動建構(包含 test)錯誤通知。當然也可以加入你們團隊在軟體開發會
用的任何方法。例如Code lint來找出Code中可能的bug或是自動產生技術文件。

CI應該會做的事:
  • Automatic Build Environment
  • Code Lint (Check Coding conventions) (optional)
  • Automatic Generate Document (optional)
  • Unit Test
  • Error Report

2. Mocha + Chai
 
     Mocha是Javascript Test framework他可以跑在node.js跟browser上,而且他的
功能也滿多的(參考ref. 1)。Chai是BDD/TDD assertion library也是可以跑在node.js跟
browser上(參考ref. 7)。

3. Travis CI
  
     Travis CI是持續整合的服務而且他跟Github有做了一些整合,並且你的Project
是放在Github上並且是Open的話。他也讓你免費使用這個服務。當然他也是有收費的
服務。從官方文件來看他支援了C/C++, PHP, Python, Ruby, Scala, Perl, Javascript
(with Node.js), Java, Haskell, Go, Erlang, Clojure and Groovy。看得出來他支援的語言
也真是多。如果不想使用線上服務的話,也是可以架設自己的CI的服務Jenkins (ref. 6)。

4. How to do use Travis CI?
 
     以下的範例我認為你已經安裝了Git跟申請好了GitHubTravis CI的帳號。
哪麼首先建立Node.js測試環境,以下是我測試的環境跟測試內容。

目錄架構
├─ Makefile
├─ README.md
├─ .gitignore
├─ .travis.yml
├─ package.json
└─ test
         └── Test.js

* Makefile

REPORTER = spec

test:
    @NODE_ENV=test ./node_modules/.bin/mocha \
    --reporter $(REPORTER)

test-w:
    @NODE_ENV=test ./node_modules/.bin/mocha \
    --reporter $(REPORTER) \
    --growl \
    --watch

.PHONY: test test-w))

* .gitignore

node_module
*.swp

* .travis.yml
  
     這個檔案是Travis CI一定要有的,而且在commit之前請務必要做驗證的動作請將以下
的檔案內容貼到http://lint.travis-ci.org/這個網站來做格式檢查不然可能會在build的過程
就出錯。還有我可以設定多個版本的node.js來測試我們的Code, 例如下面的檔案說明了我
需要0.11, 0.10, 0.8和0.6的node來做測試。

language: node_js
node_js:
  - "0.11"
  - "0.10"
  - "0.8"
  - "0.6"

* package.json
  
      因為Travis CI要執行測試指令的話,會經過package.json的scripts選項的test來執行
所以我的話是執行Makefile來完成(Travis CI其實會下npm test來完成test的動作)

{   
  "name": "mocha_test",
  "version": "0.0.1",
  "dependencies": {
    "mocha": "~1.10.0",
    "chai" : "~1.7.2"
  },
  "scripts": {
      "test": "make test"
    }
}
 
* test/Test.js


這邊我就不說講了就很簡單測試'test'是不是等同於'test'而已mocha+chai有時間我在來寫一篇文章來說明。 

var chai = require('chai');
var assert = chai.assert;

describe('Test mocha  ',function() {

    before(function(done) {
        // Create something before testing
        // then using done() to finish
        done();
    });

    it('should equal test',function() {
        assert.equal( 'test', 'test' ); 
    });
    
});
 
 當你建立好以上的檔案可以執行下面的指令在本地端先做測試:

$> npm install && npm test 
 
如果成功的話應該會看到類似以下的畫面 :
















* 接著建立git repository吧


$> git init
$> git add .
$> git commit -m 'mocha test'
 

建立Github的repository,可以參考https://help.github.com/articles/create-a-repo
Push 你的 repository到GitHub吧 
 


$> git remote add origin https://github.com/user/repo.git
$> git push origin maste
 
* Travis CI
接著進入https://travis-ci.org/profile ,看到自己剛剛上傳的專案把他設定會ON 
 










設定完之後,請修改的本地的檔案然後commit一版然後在push到github上,接著回到
https://travis-ci.org/  就會看到Travis CI就會開始做整合測試了






張貼留言

這個網誌中的熱門文章

Unions 在C語言的簡單介紹

解釋scope.$apply用來做什麼? -- AngularJS

JavaScript的Timer用法