在我們的代碼需要與其他系統(tǒng)或者函數(shù)對接時盖喷,它可以模擬這些場景,從而使我們測試的時候不再依賴這些場景敦第。Sinon有主要有三個方法輔助我們進行測試:spy,stub店量,mock芜果。
spy
生成一個間諜函數(shù),它會記錄下函數(shù)調(diào)用的參數(shù)融师,返回值右钾,this的值,以及拋出的異常旱爆。
spy一般有兩種玩法舀射,一種是生成一個新的匿名間諜函數(shù),另外一種是對原有的函數(shù)進行封裝并進行監(jiān)聽怀伦。
stub
是帶有預(yù)編程行為的函數(shù)脆烟,就是spy的加強版,不僅完全支持spy的各種操作房待,還能操作函數(shù)的行為邢羔。和spy一樣驼抹,stub也能匿名,也能去封住并監(jiān)聽已有函數(shù)张抄。然而有一點和spy不同砂蔽,當封裝了一個已有函數(shù)后,原函數(shù)不會再被調(diào)用署惯。
使用stub來嵌入或者直接替換掉一些代碼左驾,來達到隔離的目的。簡單的說极谊,stub是代碼的一部分诡右。在運行時用stub替換真正代碼,忽略調(diào)用代碼的原有實現(xiàn)轻猖。目的是用一個簡單一點的行為替換一個復(fù)雜的行為帆吻,從而獨立地測試代碼的某一部分。
sinon.stub(HTMLMediaElement.prototype, "play"):將HTMLMediaElement.prototype.play 替換成一個stub()咙边,可將它替換成指定函數(shù)
stub.restore():由于 stub 是使用指定函數(shù)替換已有的函數(shù)猜煮,所以每次使用后需要用stub.restore()復(fù)原它
mock
像spy和stub一樣的偽裝方法,如果mock沒有得到期望的結(jié)果就會測試失敗败许。