在測試 ES6 模組時,經常需要模擬導入的模組來隔離和斷言特定功能。在這種情況下,Jest 提供了幾種用於模擬模組導入的選項。
傳統方法包括分別使用 jest.mock 或 jest.spyOn 模擬單一命名導出或預設導出。然而,對於更複雜的場景,有更靈活的方法。
利用 import * 允許模擬模組中的所有導出,包括命名導出和預設導出。以下是使用此方法修改後的程式碼:
<code class="js">// dependency.js export const doSomething = (y) => console.log(y); export default (y) => console.log(y); // myModule.js import * as dependency from './dependency'; export default (x) => { dependency.doSomething(x * 2); dependency.default(x * 2); }; // myModule-test.js import myModule from '../myModule'; import * as dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { dependency.doSomething = jest.fn(); dependency.default = jest.fn(); myModule(2); expect(dependency.doSomething).toBeCalledWith(4); expect(dependency.default).toBeCalledWith(4); }); });</code>
在此範例中,我們將 import { doSomething } 替換為 import * 作為依賴項來匯入所有命名匯出。然後我們直接使用 jest.fn() 改變導入的物件以模擬導出的函數。
以上是如何在 Jest 中有效模擬 ES6 模組導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!