Vue3 + Vite + Vitest 導入(超入門)

Vue.js

 vue.jsをテストコードでUnite testを行いたかった。テストコードは、変更内容の影響を見極めるのに、大変有用で、工数コストも削減できることから、是非とも導入していきたい。

 vueで用いられるテストライブラリには「jest」が使用されてきたが、開発ツールに「vite」を選択した場合、「import.meta.env.・・・」(.envから設定値を取得する箇所)でエラーとなってしまった。エラーメッセージはこんな感じ。

SyntaxError: Cannot use 'import.meta' outside a module

回避する手段もあるようだが、調べてみると、「『vitest』を使いましょう」という記事があり、テストライブラリは「vitest」を採用することに決定。
テスト環境の構築も難しいことはなく、多くの部分で「jest」と互換性がある。

ここでは、そのテスト環境の構築方法の備忘録をメモ。既にviteでプロジェクトが構成されている前提でVitestを導入する手順を記載する。OSはWindows。

Vitest公式サイト

vitestを勧めているディスカッション

JEST公式サイト

Vitestの導入

Vitestをインストールします。プロジェクトのルートディレクトリへ移動し、コマンドを実行。

npm install -D vitest

コマンドからテストを実行できるようにする

「npm run test」のコマンドで、テストコードを実行できるように設定します。
「package.json」へ以下を記載します。既に、「script」のノードは存在するはずなので、scriptは以下の「test」を追記します。

{
  "scripts": {
    "test": "vitest"
  }
}

ここまでを確認。Vitestを実行して、以下の表示が出ればOK。以下のコマンドを実行。

npm run test
「npm run test」の実行後

テストコードを実行してみる

簡単なテストコードを書いて実行してみます。ファイル名は「xxxx.test.js」のように、拡張子の手前に、「.test」又は「.spec」と入れれば、Vitestがテストコードと認識し、実行してくれるようです。
テストコードを配置するディレクトリの名称は何でも良さそうですが、ここではJestにならって「__tests__」とします。
以下のコードで、”__tests__/testCode.test.js”を作成しました。

import {it, expect} from 'vitest'

it('Test: Try testing', () =>{
    expect( 2 * 2 ).toBe(4)
})

続いて、「npm run test」を実行します。

テストが実行されました。

ちなみに、コードを以下のように変更すると不合格となります。

expect( 2 * 2 ).toBe(3)

これで、Vitestを実行するための最低限の環境が整いました。Vue3に対してJestの実行環境を整えようと思うと、諸々の設定で、ファイルを作成したり、package.jsonへの追記があったりと、面倒ごとがありましたが、Vitestは非常に簡単に導入ができました。

設定ファイルを用いることで、細かな設定を変更できますが、ここでは割愛します。

GUIでテスト結果を表示

GUIでテスト結果を表示することも可能です。「package.json」に記載した”test”ノードの値を以下に変更します。

{
  "scripts": {
    "test": "vitest --ui"
  }
}

「npm run test」を実行すると以下のように、エラーが表示され、必要なパッケージのインストールを求められますので、「y」を入力して続行。

「@vitest/ui」のインストールが行われます。

インストール完了後、再度「npm run test」を実行。
すると、ブラウザが起動し、以下のような表示が現れます。

Vitestが実行された状態でNodeが稼働しているので、コードの修正が即座に反映されてきます。
テストコードを以下に戻します。

expect( 2 * 2 ).toBe(4)

このように、機能追加も楽なので、使い勝手のいいテストツールだと思います。

まとめ

  • 「npm install -D vitest」でインストール
  • package.jsへ「npm run test」のコマンドを定義。
  • テストコードはJestと互換あり。
  • 機能追加はvitestが自動でインストールしてくれる

こんな感じです。

コメント

タイトルとURLをコピーしました