0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Nuxt3+VitestでnavigateTo()をモック化する

Last updated at Posted at 2023-08-31

結論

vi.stubGlobal()を使います。
vi.spyOn()vi.mock()も試したがうまくいきませんでした。
ベストプラクティスではないかもしれないが参考になれば幸いです。

前提

unplugin-auto-importは導入済み
(詳しくは参考ページをご覧ください。)

コード例

ホームボタンをクリックしたらトップページに遷移するような挙動のテストを行う場合

test.spec.ts
import { vi } from 'vitest'

const mock = vi.fn();
vi.stubGlobal('navigateTo', mock);

describe('Unit Test', () => {

    // wrapperの設定は省略

    it('Home Button Clicked', () => {
        wrapper.find('#home-btn').trigger('clicked');
        expect(mock).toHaveBeenCalledWith('/')
    });
});

navigateTo()とは

Nuxt3でルーティングに使われる関数です。
router.push()の代わりに使うことが推奨されています。
↓公式ドキュメント
https://nuxt.com/docs/api/composables/use-router

Nuxt3では自動インポートされるためimport文を書くことなく使用できます。
一方、Vitestでは自動インポートされないためモック化しなければなりません。
(モック化せずにテストを走らせるとReferenceErrorとなります。)

stubGlobal()とは

公式ドキュメントによると、JSDOMやNodeと関係のないグローバル変数をモック化することでできるらしいです。
↓公式ドキュメント
https://vitest.dev/guide/mocking.html#globals

参考ページ

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?