從這周開始,每週至少完成一篇分享~每週週六睡前完成本週的初步讀文章分享,下週四睡前將上週的大問題修改完畢,將深入理解的知識補充完~必定要堅持下去~也但願本身可以深入理解每個內容,若是你們發現文章中的問題或者有好的建議可直接留言,有好的相關文章也歡迎發給我~一塊兒加油吧!javascript
node中文api文檔
html
斷言是編程術語,表示爲一些布爾表達式,程序員相信在程序中的某個特定點該表達式值爲真,能夠在任什麼時候候啓用和禁用斷言驗證,所以能夠在測試時啓用斷言而在部署時禁用斷言。assert主要是用於有確定結果的測試。java
assert(value, message), assert.ok(value, [message]) //判斷中值是否爲truenode
assert.ifError(value) //測試值是否不爲 false,當爲 true 時拋出。經常使用於回調中第一個 error 參數的檢查。git
assert.fail(actual, expected, message, operator) //拋出異常,有message時顯示 message,沒有使用operator做爲爲分隔符程序員
assert.equal(actual, expected, [message]) //("=="判斷)是否相等github
assert.notEqual(actual, expected, [message]) //("=="判斷)是否不相等正則表達式
assert.strictEqual(actual, expected, [message]) //("==="判斷)是否相等 相反:notStrictEqualshell
assert.notDeepEqual(actual, expected[, message]) // 是否深度匹配
assert.throws(block, [error], [message]) //聲明一個block用於拋出錯誤,'error'能夠是構造函數,驗證函數或者正則表達式
assert.doesNotThrow(block, [message])//聲明模塊不拋出錯誤
TDD指的是Test Drive Development,很明顯的意思是測試驅動開發,也就是說咱們能夠從測試的角度來檢驗整個項目。大概的流程是先針對每一個功能點抽象出接口代碼,而後編寫單元測試代碼,接下來實現接口,運行單元測試代碼,循環此過程,直到整個單元測試都經過。這一點和敏捷開發有相似之處。
BDD指的是Behavior Drive Development,也就是行爲驅動開發。BDD用天然語言來描述,讓開發、測試、BA以及客戶都能在這個基礎上達成一致。由於測試優先的概念並非每一個人都能接受的,可能有人以爲系統太複雜而難以測試,有人認爲不存在的東西沒法測試。因此,咱們在這裏試圖轉換一種觀念,那即是考慮它的行爲,也就是說它應該如何運行,而後抽象出能達成共識的規範。
mocha是一款功能豐富的javascript單元測試框架,它既能夠運行在nodejs環境中,也能夠運行在瀏覽器環境中。mocha會串行地執行咱們編寫的測試用例,能夠在將未捕獲的異常映射到對應測試用例(?這裏是指的哪部分)的同時,保證輸出靈活準確的測試結果。
mocha會生成一個包在最外面的describe函數
var assert = require('chai').assert; //斷言模塊chai中的assert風格
describe('用例集描述string', function() { // "測試套件"(test suite),表示一組相關的測試
it('用例的描述string', function() { //it爲一個測試用例,用例經過後會在描述前打勾
// function爲用例的內容
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
});
});複製代碼
callback:x
describe('User', function() {
describe('#save()', function() {
it('should save without error', function(done) {
var user = new User('Luna');
user.save(function(err) {
if (err) throw err; //判斷用例執行成功與否是在異步代碼的回調裏邊完成的
done(); // 通知Mocha測試結束
/* user.save(done); // 異步代碼中邏輯錯誤時,會在回調中拋出一個錯誤,直接這樣寫便可 */複製代碼
});
});
});
});複製代碼
promise: 讓用例函數返回一個promise對象來進行正確性判斷
不建議使用箭頭函數~~
describe('hooks', function() {
before('可選:描述string',function [funName可選] () {
// runs before all tests in this block
});
after(function() {
// runs after all tests in this block
});
beforeEach(function() {
// runs before each test in this block
});
afterEach(function() {
// runs after each test in this block
});
// test cases
});複製代碼
若是在用例集函數以外定義鉤子函數,那麼這個鉤子函數將會對全部的mocha單元測試用例生效。
describe.only()/it.only() : 只執行此用例集或用例
describe.skip()/it.skip():跳過此用例集或用例的執行,跳過的用例會被標記爲pending
的用例
this.skip();: 調用skip函數跳過此用例
this.retries();:從新執行用例(會從新運行用例函數的beforeEach和afterEach鉤子函數)
this.slow(num);:標記耗費num時間認爲執行耗時過長
this.timeout(500):定義用例、用例集、鉤子函數超時時間,若是嵌套的用例集或者用例重寫了timeout時間,則會覆蓋上層的設置。經過this.timeout(0)
,能夠關掉用例或用例集的超時判斷。
mocha.setup('bdd'): 設置接口類型
mocha.run(); : 測試腳本加載完以後用mocha.run()
函數來運行測試
mocha init
: 生成一個瀏覽器中單元測試的架子
mocha --delay
: 在全局環境中生成一個run函數,延遲工做完成後調用run函數run()便可啓動測試。
mocha命令的基本格式是:mocha [debug] [options] [files]
mocha的測試接口類型指的是集中測試用例組織模式的選擇,包括BDD行爲驅動開發(Behavior Driven Development),TDD測試驅動開發(Test-Driven Development),Exports,QUnit 和 Require-style 幾種
BDD測試接口提供 describe(), context(), it(), specify(), before(), after(), beforeEach(), 和 afterEach()幾種函數,其中context函數只是describe函數的別名,specify函數也是if函數的別名。
TDD接口提供 suite(), test(), suiteSetup(), suiteTeardown(), setup(), 和 teardown()函數
bash通配符(node通配符)【eg:$ mocha 'test/**/*.@(js|jsx)' 需加單引號】
通配符 意義
* 匹配0任意多個字符(包括零個或一個)
? 匹配任意一個字符(不包括零個)
[characters] 匹配任意一個屬於字符集中的字符
[!characters] 匹配任意一個不是字符集中的字符
[[:class:]] 匹配任意一個屬於指定字符類中的字符
字符類 意義
[:alnum:] 匹配任意一個字母或數字
[:alpha:] 匹配任意一個字母
[:digit:] 匹配任意一個數字
[:lower:] 匹配任意一個小寫字母
[:upper] 匹配任意一個大寫字母
shouldjs是一個BDD測試斷言庫,它包裝了assert,改變了書寫風格,擴展了Object.prototype,額外提供了".should"語法。一旦引入了should,即「var should = require('should');」,那麼當前js文件內的全部繼承至Object的對象均可以.should:
目標對象.should.xxxx複製代碼
若是目標對象沒有繼承至Object,那就換一種方式使用:
should(目標對象).xxx複製代碼
或者
should.xxxxx(目標對象);複製代碼
should庫須要額外安裝:$ npm install should --save-dev
瀏覽器端將should包下的should.js引入到前臺頁面,便可和後端同樣使用。
should提供了一系列的靜態方法,這些方法能夠對非Object對象使用。它們和assert的基本方法實際上是同樣的。具體api看上面連接。
每個should斷言都返回一個被should.js包裝過的對象,因此他能夠造成鏈式語法,可是有一些斷言,好比.length,.property 等將被斷言的對象改變成了其屬性值。
並且在「鏈」中,可使用下面等方便理解的詞,這些詞其實對should的斷言一點實際影響都沒有,注意,沒有.or。
.an, .of, .a, .and, .be, .have, .w ith, .is, .which.
karma就是把咱們測試過程當中編寫的測試用例,經過它調用瀏覽器來運行這些測試用例,而後再聚集測試結果,生成測試報告。能夠選擇各種測試框架(mocha、Jasmine 等)。
Travis-ci是一款持續集成(Continuous Integration)服務,它可以很好地與Github結合,每當代碼更新時自動地觸發集成過程。
配置.travis.yml文件,在travis官網上開啓自動構建,則能夠簡單地開始某一項目的自動構建