Karma和Jasmine的基本瞭解,參考另一篇文章Angularjs官方示例項目之單元測試套件karma-jasminepython
TBDgit
Jasmine的官方文檔參考:Jasmine Behavior-Driven JavaScript Documentation 上面有很一個很詳細的測試示例。github
Jasmine的核心套件是describe()函數,它是一個全局函數,能夠在測試時被全局調用。數組
describe(specName, function(){})函數有兩個參數,分別是細則spec套件的名字和測試套件的函數。describe()是能夠嵌套的,也就是說能夠在一個describe()的第二個參數函數中,再定義個describe()。函數
經過調用it()全局函數來在describe()中定義一個細則spec。單元測試
describe('A spec suite', functoin(){ it('constains a equal spec', { expect(true).toBe(ture); }); });
一個describe()中能夠有多個細則spec,同時,一個spec細則中也能夠有多個預期expect斷言項。可是,只有一個細則中因此的斷言項目都經過,纔算是經過一個細則spec。測試
beforeEach(functon) 傳入的參數是一個函數,該函數會在每一個細則describe運行以前被調用。ui
同理,afterEach(function)則是在每一個細則describe運做以後被調用。this
測試時,咱們是想要知道某個斷言條件下應用是符合咱們的預期expect的。好比:「若是咱們點擊了這個按鈕,咱們會指望有什麼結果。」在jasmine中,使用expect(needTestedValue)函數來建立這個預期,其參數表示咱們真實的須要被測試的值。
spa
相應的,有須要測試的值,就有咱們期待的值。這個期待值就保存在匹配器macher,好比內置的toBe(expectedValue)中。
最後的語法相似與
expect(needTestedValue).macher(expectValue)
一個代碼示例以下:
describe('A spec suite', functoin(){ it('constains a equal spec', { expect(true).toBe(ture); }); // you can use 'not' it('constains a not equal spec', { expect(true).not.toBe(false); }); });
內置的匹配器有:
//比較x和y是否值相等,至關於== expect(x).toEqual(y); //比較x和y是否不相等 expect(x).not.toEqual(y); //比較x和y是不是相同的對象,至關於JavaScript中的"===" expect(x).toBe(y); //比較x是否匹配pattern正則 expect(x).toMatch(pattern); //x是否爲undefined expect(x).toBeDefined(); //x是否爲null expect(x).toBeNull(); //x是否爲true expect(x).toBeTruthy(); //x是否爲false expect(x).toBeFalsy(); //y是在數組x中(x能夠是字符串或數組) expect(x).toContain(y); //x是否比y小 expect(x).toBeLessThan(y); //x是否比y大 expect(x).toBeGreaterThan(y); //x是否在一個指定的浮點精度內與y相近 expect(x).toBeCloseTo(y); //函數是否拋出異常 expect(fn).toThrow(e);
自定義方法是在Jasmine塊中調用addMachers()函數
describe('A spec suite', functoin(){ tihs.addMachers({ customerMacher: function(expected) { // customer rule return this.actual <= expected; } }); });
這樣就能夠在測試套件中使用自定義的 customerMacher 匹配器了。