https://github.com/LearnBoost/expect.jshtml
在這裏,主要是熟悉裏面的API便可.列舉一下經常使用的幾項——前端
1> 布爾(ok)git
var bFlag = true; // 判斷布爾類型 expect(bFlag).to.be.ok(); // 經過
2> 全等(be/equal)github
expect(NaN).not.to.equal(NaN); // 經過 expect(NaN).not.to.be(NaN); // 經過
3> 非全等(eql)編程
expect(1).to.eql('1'); // 經過 // 比較對象內容 expect({ a: 'b' }).to.eql({ a: 'b' }); // 經過
4> 類型數組
// typeof with optional `array` expect(5).to.be.a('number'); expect([]).to.be.an('array'); // works expect([]).to.be.an('object'); // works too, since it uses `typeof` // constructors expect(5).to.be.a(Number); expect([]).to.be.an(Array); expect(tobi).to.be.a(Ferret); expect(person).to.be.a(Mammal);
5> 長度(length)函數
expect([]).to.have.length(0);
expect([1,2,3]).to.have.length(3);
6> 空性能
expect({ my: 'object' }).to.not.be.empty();
expect([1,2,3]).to.not.be.empty();
7> 屬性this
expect({a: 'b'}).to.have.property('a'); expect({ a: 'b' }).to.have.key('a'); expect({ a: 'b', c: 'd' }).to.only.have.keys(['a', 'c']);
expect主要是爲前端js實現斷言。是防護性編程(請參考裏面的assert斷言)內容的一部分。url
主要的表現形式注入到函數(或者組件)的參數的極限值的判斷及處理。
例如,如下下載組件暴露的download接口,須要對傳入的opts參數作判斷——
var download = function(opts) { var list = opts.list; // 接收的參數必須是一個數組 expect(list).to.be.an('array'); var file = list[0]; // file不能爲空 expect(file).to.not.empty(); // 接收的file對象必須具備屬性size且爲數字 expect(file).to.have.property('size'); expect(file.size).to.be.a('number'); // 接收的file對象必須具備屬性size且爲數字 expect(file).to.have.property('isdir'); expect(file.isdir).to.be.a('number'); // 單文件下載 // 即:數組只有一個對象 if (list.length === 1) { // 直接單文件下載方式 if ((file.isdir === 0) { this._downloadOneFileDlink(file); } else if (file.isdir === 1) { // 文件夾 this._downloadPackage(list); } return; } // 打包下載 this._downloadPackage(list); return; }
相比於註釋及日誌記錄的方式,expect(斷言)的使用有如下兩點優點——
開發階段,可直接使用該庫,使用expect類進行斷言處理。或對其中核心方法從新構造以實現對應核心應用便可(構造Assert類,加入經常使用斷言方法)。在產品部署階段,過濾斷言語句,以提升執行性能。