在完美的世界程式碼庫中,不需要操作全局對象,但是世界程式碼庫很混亂 - 測試也是如此。
您要不惜一切代價避免一個測驗影響另一個測驗。無論順序如何,或是否跳過某些測試,測試都應該有意義。
模擬值的簡單方法是將屬性設定為測試中所需的任何值。
只要您更改此特定測試擁有(已建立)的本機物件中的值就可以了:
如果你對全域物件這樣做,它會變得混亂:
這就是 jest.replaceProperty() 的用途:
方法可以像屬性一樣被模擬。
如果你在全域物件上使用 myObject.someFunction = jest.fn() ,你的測驗可能會互相依賴並失去它們的意義:
我們應該如何模擬全域物件中的方法?這就是 jest.spyOn() 的好處:
如果你想確保所有測試都發現系統處於相同(新鮮、乾淨)狀態,則需要在每次測試後恢復模擬的狀態。
最簡單的解決方案是設定restoreMocks配置屬性。
最直接的選擇是在 afterEach() 中呼叫 jest.restoreAllMocks()
有時您想要模擬文件中所有測試的內容。如果您在頂層或在describe()區塊中使用jest.spyOn()和jest.replaceProperty(),則在執行第一個測試後,所有Mock將被重設。
在頂層,您可以安全地重寫屬性和方法,無需 jest.spyOn() 和 jest.replaceProperty()。
如果您只想為describe() 區塊模擬事物,則需要在beforeEach() 掛鉤中進行這些呼叫。
以上是笑話回顧:安全模擬全域物件的屬性和方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!