假設我想對這個實用函式進行單元測驗。我使用 Vue 3,但這段代碼在“普通”js 檔案中,而不是 sfc。
我怎么能那樣做?
function getDynamicComponent() {
if (...) {
return defineAsyncComponent(() => import('../path/to/component-A.vue'))
} else {
return defineAsyncComponent(() => import('../path/to/component-B.vue'))
}
}
在這種情況下,我更喜歡模擬函式的實作并檢查.toHaveBeenCalledWith(...). 但我不能這樣做,import對吧?
PS 對于 Jest 或 Vitest 語法,我將不勝感激
uj5u.com熱心網友回復:
作為對我的評論的跟進,您可以使用 jest 模擬該功能:
let defineAsyncComponent = jest.fn()
let vueMock = {
defineAsyncComponent
}
jest.mock('vue', () => {
return vueMock;
})
import { defineAsyncComponent } from 'vue';
console.log(defineAsyncComponent._isMockFunction) // true
然后您可以測驗是否呼叫了 defineAsyncComponent :
expect(defineAsyncComponent).toHaveBeenCalled()
使用 toHaveBeenCalledWith 會很棘手,因為它使用 toEqual,所以你的測驗總是會失敗
您可以在 defineAsyncComponent 函式上定義一個實作來測驗引數:
let defineAsyncComponent = jest.fn().mockImplementation((fn) => {
expect(typeof fn).toBe('function')
})
您也可以呼叫該函式并檢查回傳值,這是一個承諾,但此時您正在測驗 import() 函式,所以我認為它不會為您的測驗增加價值:
let defineAsyncComponent = jest.fn().mockImplementation((fn) => {
expect(typeof fn).toBe('function')
expect(typeof fn().then).toBe('function')
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/518424.html
標籤:javascriptVue.js单元测试开玩笑的Vuejs3
上一篇:can_ok帶匿名函式
下一篇:單元測驗Python
