天天看點

Angular學習筆記67:Angular項目的單元測試 -- Jasmine的簡單的了解Jasmine的簡單的文法

Jasmine的簡單的文法

Distribution

Distribution對應的全局函數是 describe(string,function),可以了解為是一個測試集或者測試包(官方稱之為suite),主要功能是用來劃分單元測試的,describe接受的兩個參數,string是這個測試套件的标題或者描述資訊,參數function就是實作這個測試套件。describe是可以嵌套使用的。

Specs

Specs對應全局函數是it(string,function),可以将其列了解為測試用例,it接受的兩個參數 string是這個測試用例的标題或者描述資訊,參數function是這個測試用例的具體實作。

Expectations

Expectations的對應的全局方法是 expect()斷言表達式,expect通過鍊式 Matcher 方法來比較實際值是否和預期值一緻,如果一緻就是測試通過,Matchers用于比較期望值和實際值并且可以使用not對期望結果的進行否定。

例如下段代碼

describe('describe的标題或者描述資訊', function () {
  it('it 的标題或者描述資訊 也可以寫成 測試用例的标題', function () {
    const a = 12;
    const b = 24;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
  });
});

describe('describe的标題或者描述資訊', () => {
  it('it 的标題或者描述資訊 也可以寫成 測試用例的标題', () => {
    const a = 12;
    const b = 24;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
  });
});

           

這裡的測試案例是不會通過的,因為a = 12 和 b = 24 不相等。

需要注意

  1. 一個測試檔案中可以包含多個 describe().
  2. 一個describe()中可以包含多個it().
  3. 一個describe()中包含的多個it()函數的中,it()的string參數不能相同,如果相同,則按照一個it()來計算,并且不會執行第二個it().
  4. 一個it()中可以包含多個 expect().
  5. 一個it()函數中,所有的expect() 都測試通過才算 it() 測試通過

生命鈎子

在jasmine中有四個全局方法作為鈎子:

  • beforeEach()
  • afterEach()
  • beforeAll()
  • afterAll()

beforeEach() 和 afterEach()

beforeEach()會在describe中的每個it的方法參數的調用前都會執行一次。

afterEach()會在describe中的每個it的方法參數的調用後都會執行一次。

在Angular中使用TestBed進行測試的時候,通常會使用 beforeEach() 來通過調用TestBed.configureTestingModule()動态建立一個用來模拟 @NgModule 的 Angular 測試子產品。

如下:

describe('PublicDataService', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({});
  });
});
           

beforeAll() 和 afterAll()

beforeAll()會在describe中的全部it的方法參數的調用前隻執行一次。

afterAll()會在describe中的全部it的方法參數的調用後隻執行一次。

this 關鍵字

可以在beforeEach()和afterEach()的通過this定義屬性,this中傳遞it的this。***注意這裡傳遞值的時候是值傳遞,***每個it中的this都是互相獨立的,改變it中this的屬性并不會作用于其他it,也不會影響到beforeEach()和afterEach()中的this。

對于不可用的的測試處理

  • 對于describe()

将describe()替換為xdescribe(),那麼整個describe()就會跳過去

  • 對于it()

在it()中使用全局的pending(reson:string)方法;

describe('describe的标題或者描述資訊', () => {
  it('it 的标題或者描述資訊 也可以寫成 測試用例的标題', () => {
    const a = 12;
    const b = 24;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
    pending('未寫完,待續');
  });
});
           

此時這個測試用例就會跳過去。

了解更多,請參見Jasmine官方文檔

繼續閱讀