首頁  >  文章  >  web前端  >  笑話回顧:安全模擬全域物件的屬性和方法

笑話回顧:安全模擬全域物件的屬性和方法

WBOY
WBOY原創
2024-07-19 15:10:32305瀏覽

Jest Recap: Safely Mock Properties and Methods of Global Objects

長話短說:

  • 您希望避免覆蓋/模擬的屬性/方法影響其他測試。
  • 對於本地物件(由該測試建立並擁有),您可以(並且應該)使用
    • localObject.theAnswer = 42 和
    • localObject.calcTheAnswer = jest.fn(() => 42).
  • 對於全域對象,您應該使用
    • jest.replaceProperty(globalObject, "theAnswer", 42) 和
    • jest.spyOn(globalObject, "calcTheAnswer").mockReturnValue(42).
  • 確保在 afterEach() 鉤子中呼叫 jest.restoreAllMocks() 。

什麼?

在完美的世界程式碼庫中,不需要操作全局對象,但是世界程式碼庫很混亂 - 測試也是如此。

您要不惜一切代價避免一個測驗影響另一個測驗。無論順序如何,或是否跳過某些測試,測試都應該有意義。

模擬屬性

模擬值的簡單方法是將屬性設定為測試中所需的任何值。
只要您更改此特定測試擁有(已建立)的本機物件中的值就可以了:

雷雷

如果你對全域物件這樣做,它會變得混亂:

雷雷

這就是 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:JS 地圖下一篇:JS 地圖