[英]Aliases for jest.fn()?
我有兩個不同的庫用於在 Jest 中進行模擬。 這些庫具有相同的名為get
函數。 這是我當前實現的一個問題,因為get
被兩個不同的庫使用,是否可以使用模擬函數的別名(jest.fn())或者某種不會破壞當前實現完整性的解決方法?
這是我目前的實現,如果可能的話,我想保持這種方式:
let get: jest.Mock<{}>
jest.mock('rxjs/ajax', () => {
get = jest.fn()
return { ajax: { get } }
})
let get as cookieGet: jest.Mock<()> // Can I do something like this
jest.mock('js-cookie', () => {
get = jest.fn()
return { get }
})
我不太熟悉 JS 中的別名,或者他們 Jest 處理這樣的事情,所以非常感謝任何幫助。
如果會導致名稱沖突,則沒有必要對對象字面量使用{ get }
速記屬性語法。
另一個問題是變量需要有mock
前綴才能在jest.mock
工廠函數的范圍內使用。 正如文檔所述,
factory 參數的一個限制是,因為對 jest.mock() 的調用被提升到文件的頂部,所以不可能先定義一個變量然后在工廠中使用它。 以單詞“mock”開頭的變量是一個例外。 由您來保證它們會按時初始化!
有可能:
import ... from 'rxjs/ajax';
import ... from 'js-cookie';
let mockRxAjaxGet: jest.Mock<{}>
jest.mock('rxjs/ajax', () => {
mockRxAjaxGet = jest.fn()
return { ajax: { get: mockRxAjaxGet } }
})
let mockJsCookieGet: jest.Mock<()>
jest.mock('js-cookie', () => {
mockJsCookieGet = jest.fn()
return { get: mockJsCookieGet }
})
問題是,一旦jest.mock
被提升到導入之上,當let
變量處於時間死區並且無法分配時,它將被評估。
所以let
最好改成var
,它被提升了。 或者像往常一樣導入get as jest.Mock<...>
函數,並在需要間諜的地方與get as jest.Mock<...>
使用。 mocked
助手可用於強制執行 TypeScript 類型安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.