💨

一日一処: NuxtでVitestを使用する時、useFetchなどNuxtの関数をMock化するには一捻り必要

2024/03/07に公開

Mock化

Mock化するときには、多くの場合、その関数自体を行ったり、関数の呼び出しの前にそもそも別のものを定義する必要がある。たとえば、Nuxtの開発環境のように、グローバルで呼び出しがすでに行われている場合は、spyOnなどは使えない。

関数の巻き上げ

vi.hoistedを使用する。

const { useState } = vi.hoisted(() =>({
    useState: fn.vi(),
}))

これでuseStateのMock化はできるが、Nuxtのためにこれを登録し置き換える必要がある。

import { mockNuxtImport } from '@nuxt/test-utils/runtime'

mockNuxtImport('useState', useState)

これにより、useStateの検証もできるし、Mock化もできるようになる。

Discussion