jasmine.any引用構(gòu)造函數(shù)或者類(lèi)名作為期望值,和真是的構(gòu)造函數(shù)匹配時(shí)返回true
jasmine的Mock Clock是一款有效的測(cè)試組件,有能力使用setTimeout或者setInterval回調(diào)函數(shù)。它使timer回調(diào)函數(shù)同步,使它們更容易測(cè)試
通過(guò)在spec或者suite里調(diào)用jasmine.Clock.useMock來(lái)安裝Mock clock。
通過(guò)jasmine.Clock.tick方法來(lái)標(biāo)記clock以觸發(fā)注冊(cè)的回調(diào)函數(shù),這個(gè)方法傳一個(gè)milliseconds.
上面這段話(huà)來(lái)自對(duì)官網(wǎng)的翻譯,一些地方不好理解,筆者對(duì)下圖程序做進(jìn)一步解釋?zhuān)瑂etTimeout(function() { timerCallback(); }, 100);是一個(gè)回調(diào)函數(shù),隔100milliseconds調(diào)用timerCallback()一次。jasmine.Clock.tick(101)為等待101milliseconds,所以第一次判斷timerCallback是否為調(diào)用時(shí)為未調(diào)用,第二次則已調(diào)用。而setInterval(function() { timerCallback(); }, 100)則是每隔100milliseconds調(diào)用timerCallback()一次,這樣解釋不難理解了,第一次判斷調(diào)用前等待101milliseconds,所以調(diào)用次數(shù)為1,第二次判斷調(diào)用前又等待50milliseconds,總等待時(shí)間為151milliseconds<200milliseconds,所以仍是調(diào)用一次,再等待50milliseconds后總等待時(shí)間>200milliseconds,所以第三次判斷調(diào)用次數(shù)為2
Jasmine支持測(cè)試異步操作,通過(guò)調(diào)用runs定義的一組blocks寫(xiě)入specs,bolcks通常結(jié)束于異步調(diào)用。waitsFor block需要一個(gè)鎖方法,一個(gè)失敗消息,和一個(gè)超時(shí)時(shí)間。鎖方法一直輪詢(xún)直到返回true或者超時(shí)。如果超時(shí),spec輸出失敗信息。一旦異步狀況出現(xiàn),另一個(gè)runs block定義終的測(cè)試行為,它期望值通常基于異步調(diào)用返回的狀態(tài)。如下圖,起初flag為false,waitsFor一直輪詢(xún),直到500 milliseconds后觸發(fā)setTimeout的function,將flag賦為true后waitsFor在超時(shí)時(shí)間未到之前結(jié)束,waitsFor下面那個(gè)runs是測(cè)試行為,筆者看了下value的值為30+。
Jasmine是構(gòu)建在javaScript之上的,必須包含在一個(gè)JS的環(huán)境中,如一個(gè)web頁(yè)面,這樣才能運(yùn)行。
jasmine的測(cè)試文件用javaScript編寫(xiě),通過(guò)Rocoo被編譯進(jìn)html(Rocoo這里不做介紹,有興趣的可以自行里了解)。通過(guò)