👻

Nuxt.js で useContext を使った時のモック方法

2021/05/24に公開

概要

Nuxt.js で useContext を使った時のテストで躓いたので忘れないようにメモ

今回は、@nuxtjs/dayjsuseContext から取得することを考える。
テスト対象は isToday 関数である。

//useDayjs.ts
export const useDayjs = () => {
  const { $dayjs } = useContext()

  const isToday = (date: ConfigType): boolean => {
      // use $dayjs
  }

  return {
    isToday
  }
}
// index.vue
export default defineComponent({
  setup() {
    const { isToday } = useDayjs()

    return {
      isToday
    }
  }
})

useContext から取得するオブジェクトのモック方法

Composition API を使わない書き方だと、 mocks$dayjs をモックできる。

const wrapper = shallowMount(Component, {
  mocks: {
    $dayjs: dayjs
  }
})

ただ、Composition API だと同じようにモックすることができない。次のように書くことで、 useContext のオブジェクトをモックできた。

const wrapper = shallowMount(Component, {
  mocks: {
    $nuxt: {
      context: {
        $dayjs: dayjs
      },
    },
  },
})

Date.now を固定するときは、 Jest のドキュメント にも書かれているように、jest.fn を使えば簡単にできる。
ただ、数値を指定するので直感的に日付の理解が難しい。 mockDate を使えば、分かりやすく簡単に Date オブジェクトをモックできる。

Discussion