【Vue3 + Jest】でユニットテストを作成する – ①環境準備 –

2021年9月6日

Vue3 を使ったプロジェクトの単体テストを作成する際にいくつか詰まった点もあったので 1 から記録していきます。

( 今回はまず jest を追加したり等環境準備の部分についてです。その他テストコードについても後ほど更新します。 )

プロジェクトへ jest の追加

まずは既存のプロジェクトへ下記コマンドで jest を追加していきます。

vue add @vue/unit-jest

すると新たに tests/unit のディレクトリとその中に example.spec.js が作成されると思います。

example.spec.js はサンプルのテストが記載されていますが、それをいじって適当に動作確認をしてもいいでしょう。

VSCode で開発している場合は下記 Jest Runner をインストールしておくとエディタからクリックして直接実行できるので便利です。

Babel が動かない問題

いざ試しにサンプルのテストでも実行してみようとすると下記のようなエラーが出ました。

Cannot find module 'babel-preset-env'
    Require stack:
 ・・・・以下略

Babel のアップデートの問題らしく、下記手順を順に行っていくと解決できました。

  1. npx babel-upgrade を実行して Babel のアップグレードをする
  2. @babel/plugin-proposal-function-sent と @babel/plugin-proposal-throw-expressions を yarn add する
  3. babel.config.js を下記のように設定
module.exports = {
    presets: ["@vue/cli-plugin-babel/preset"],
    env: {
      "test": {
          "presets": ["@babel/preset-env"],
          "plugins": [
            ["@babel/plugin-proposal-decorators", { "legacy": true }],
            "@babel/plugin-proposal-function-sent",
            "@babel/plugin-proposal-export-namespace-from",
            "@babel/plugin-proposal-numeric-separator",
            "@babel/plugin-proposal-throw-expressions",
            "@babel/plugin-transform-runtime"
          ]
      },
      "production": {
          "plugins": ["transform-remove-console"]
      }
  }
  };

上記全てを実行すると自分の場合 Babelでエラーは出なくなりました。

Vue のバージョンによるエラー

次に実行すると下記エラーが出ました。

   TypeError: 'set’ on proxy: trap returned falsish for property 'hasOwnProperty’

このエラーはここの git hub 上にも記載されていました。

yarn upgrade vue で 3.0.6 以上にするとこちらのエラーも解決しました。

まとめ

今回は一旦ここまでです。いくつかエラー、うまくいかないポイントもありましたがこれで一旦テストが実行できるまでになりました。

次回は Router や Store などを Mock しながら compositionAPI で実装したページのテストを作成していきたいと思います。

参考書籍

Vue3 を本で勉強したい方はこちらを参考にしてください。 3 になるとまだあまり種類は出ていない様です。

その他基礎から体系的に勉強したい方はこちらも。