Jasmine學習筆記(1)

開通了博客,恰巧這兩天在看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是個菜鳥,還須要無盡的學習和鑽研

相關文章
相關標籤/搜索