Vue-Test-Utils と Vitest を使用した Vue-Router シミュレーション
P粉190883225
P粉190883225 2023-08-25 09:26:52
0
1
489

Vitest を使用して Vue-Router をモックするロジックを理解しようとしています。

これを行うために、非常に単純なプロジェクトでテスト環境をセットアップしてシミュレーションしてみました。 Vue-Test-Utils の公式ドキュメントに従おうとすると、常にエラーが発生します。彼らが Jest を使用しているからかどうかはわかりません。

本物の vue-router を使用すると問題は解決しましたが、vue-router をモックしたほうが良いと思います。

以下では、まずプロジェクトのソース コードを説明し、次に受け取ったエラーを説明します。

Home.vue

<スクリプト セットアップ lang="ts"> 「vue」から {onMounted} をインポートします。 「vue-router」から {useRoute} をインポートします。 const ルート = useRoute() onMounted(() => { コンソール.ログ(ルート.クエリ) }) 
      <テンプレート>
       
ホーム

Home.spec.ts

import {expect, it, vi} from "vitest"; 「@vue/test-utils」から {mount} をインポートします。 ホームを「../src/components/Home.vue」からインポートします。 it('ホームテスト', async () => { const ラッパー = mount(Home) Expect(wrapper.exists()).toBeTruthy() })

vite.config.ts

///  「vite」から {defineConfig} をインポートします 「@vitejs/plugin-vue」から vue をインポートします // https://vitejs.dev/config/ デフォルトのdefineConfigをエクスポート({ プラグイン: [vue()]、 テスト: { 環境: 'jsdom', include: ['./test/**/*.spec.ts']、 除外: ['node_modules', 'dist'], グローバル: true } })

私のエラーメッセージは次のとおりです: ..

試したこと

以下のような vue-router をシミュレートしてみました

vi.mock('vue-router', () => ({ useRoute: vi.fn()、 }))

または単に

vi.mock('vue-router')

これが私の最後の Home.spec.ts ファイルです

import {expect, it, vi} from "vitest"; 「@vue/test-utils」から {mount} をインポートします。 ホームを「../src/components/Home.vue」からインポートします。 vi.mock('vue-ルーター') it('ホームテスト', async () => { const ラッパー = mount(ホーム, { グローバル: { スタブ: ["ルーターリンク"、"ルータービュー"] } }) Expect(wrapper.exists()).toBeTruthy() })

P粉190883225
P粉190883225

全員に返信 (1)
P粉294954447

まず、Home.vuerouter-linkまたはrouter-viewを確認します。

リーリー

したがって、Home.spec.tsは次のようになります:

リーリー

コメント/提案:

  • 説明を使用してテスト コンテキストを定義する
  • コンポーネントをマウントするグローバル関数を定義し、複製ではなく再利用します
  • 監視とシミュレーションには.spyOn().mockImplementation...()を使用します
  • AAA [配置、動作、アサート] や GWT [与えられた、いつ、その後] などの構造化された直接的な方法を使用してテストを作成します。私は数年間テストしており、今でも使用していますが、何をテストしているのかを理解するのに役立ちます。
  • Use
  • .toHaveBeenCalled...()モックが期待どおりに動作するかどうかを確認する
  • mount()関数内のスタブは、テンプレートで使用されるコンポーネントに関連している必要があります (したがって、 を使用しない場合はリストに表示されません)スタブとして)
  • ###それが役に立てば幸い、 乾杯!
いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!