簡體   English   中英

jest.fn() 的別名?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM