開通了博客,恰巧這兩天在看Jasmine的東西,看了一點點別人寫的文章,如今爲止對jasmine的認識就是:正則表達式
一個js單元測試的框架數組
赫赫 冷笑。。。(廢話)框架
看到如今看到了如下幾個重要的知識點:ide
Specs,Expectations,Suites,Matchers函數
Specs:單元測試
specs就是你測試的主體,是js的函數。用jasmine的全局方法it()定義,有兩個參數一個是string,一個是function string是用來描述這個specs的,要讓你本身包括看到的人能明白這個specs是作什麼的 function裏面就是你測試的東西了學習
it('Student must defined', function () {
var foo = 0;
foo++;
});
Expectations:測試
在jasmine裏面被叫作斷言,通俗點意思就是語言的意思吧。ui
在specs中利用expectations來斷言你的代碼是否是成立。expectations用expect()方法來定義。在一個spec裏面,只有全部的expectations都爲true時,這個spec才經過,不然失敗this
it ('should increment a variable',function(){
var foo = 0;
foo++;
expect(foo).toEqual(1);
})
Suites:
suites至關因而specs的集合,不少specs被組織在suites中。suites使用全局方法describe()定義,string和function
describe('Calculator', function () { it('can add a number', function () { ... }); it('can multiply some numbers', function () { ... }); });
同一個suite中的specs共用一個函數做用域,也就是說在一個suites中聲明的變量能夠被這個suites中全部的specs訪問
1 describe('Calculator', function () { 2 3 var counter = 0 4 5 it('can add a number', function () { 6 7 counter = counter + 2; // counter was 0 before 8 9 expect(counter).toEqual(2); 10 }); 11 12 it('can multiply a number', function () { 13 14 counter = counter * 5; // counter was 2 15 16 before expect(counter).toEqual(10); 17 18 }); 19 20 });
若是想讓一個變量在每一個spec裏面重置爲某一個值,可使用beforeEach()
beforeEach(function(){ a=0; })
jasmine支持嵌套describes
describe('some suite', function () { var suiteWideFoo; beforeEach(function () { suiteWideFoo = 0; }); describe('some nested suite', function() { var nestedSuiteBar; beforeEach(function() { nestedSuiteBar=1; }); it('nested expectation', function () {
expect(suiteWideFoo).toEqual(0); expect(nestedSuiteBar).toEqual(1); }); }); it('top-level describe', function () {
expect(suiteWideFoo).toEqual(0);
expect(nestedSuiteBar).toEqual(undefined); // Spec will fail with ReferenceError: nestedSuiteBar is not undefined }); });
若是你想禁止Specs的運行,你能夠用xit( )代替it( ). 若是你想禁止Suites的運行你能夠用xdescribe()代替describe() 。
Matchers
expect(x).toEqual(y); //當x和y相等時候經過,toEqual也能夠判斷對象 expect(x).toBe(y); //當x和y是同一個對象時候經過 expect(x).toMatch(pattern); //x匹配pattern(字符串或正則表達式)時經過 expect(x).toBeDefined(); // x不是undefined時經過 expect(x).toBeUndefined(); // x 是 undefined時經過 expect(x).toBeNull(); //x是null時經過 expect(x).toBeTruthy(); //x和true等價時候經過 expect(x).toBeFalsy(); //x和false等價時候經過 expect(x).toContain(y); //x(數組或字符串)包含y時經過 expect(x).toBeLessThan(y); //x小於y時經過 expect(x).toBeGreaterThan(y); // x大於y時經過
expect(x).toMatch(/y/i) ; //匹配正則表達式
expect(function(){fn();}).toThrow(e); //函數fn拋出異常時候經過
全部的matchers匹配器支持添加 .not反轉結果:
expect(x).not.toEqual(y);
還有一種自定義Matchers的狀況:
matcher使用this.actual接受到一個實際值(該匹配函數也能夠包括0或多個參數)當實際值經過匹配,返回一個ture或false
toBeLessThan: function(expected) { return this.actual < expected; };
Setup方法:
beforeAll:在每一個suite裏面全部的spec執行以前運行
beforeEach:在suite裏面每個spec執行以前執行
Teardown方法:
afterAll:在每一個suite裏面全部的spec執行以後運行
afterEach:在suite裏面每個spec執行以後執行
暫時就這麼多了,lz是個菜鳥,還須要無盡的學習和鑽研