- 中川旭
- 約 2,600 文字
- 3,900 View
目次
フロントエンド連載の1記事目です。
TIG DXユニットの中川旭です。新卒で2020年10月に入社しました。初記事です。
作業が詰まったときや実際に作業するのが面倒なときのために、この記事を最後まで作業をした後のコードを下のリポジトリに置きます。
Vue Testing Libraryのいいところ
Vue Testing LibraryはVue.js公式のライブラリであるvue-test-utilをベースとする、DOM Testing LibraryのVue.js用拡張です。
Vue Testing Libraryを用いると、Vue.js公式ライブラリであるvue-test-utilと比較して内部構造を意識せずにテストを作成できます。
この記事では環境構築までとし、詳細な機能や具体的なメリットやテストの書き方の紹介はまたの機会に。
Vue.jsプロジェクトの開始 ~ JestでTypeScript部分のテストを動かすまで
使用するものの紹介
前提
Windows上で Node.js v14.17.0 (npm v6.14.13) を使用しています。
この環境の準備に関しては、Microsoftのページにとても丁寧な説明があります。
Vue CLI のインストール
Vue.js開発ツールとして、Vue CLIが提供されています。まずはこれをインストールします。
npm install -g @vue/cli |
Vueプロジェクトの作成
適当な場所で”sample”という名前のVueプロジェクトを作成します。
cd ~ |
以下のような画面から基本設定をできます。今回はせっかくなので”Manually select features”を選択してみます。
Vue CLI v4.5.13 |
するとさらに詳細な設定画面が表示されます。
今回は下のように、Babel TypeScript を選択します。
Vue CLI v4.5.13 |
Enterキーを押すとVue.jsのバージョン選択画面に。今回は3.xを選択します。
Vue CLI v4.5.13 |
その後、いくつか設定ありますが、好みで設定しましょう。(“?”のあとが今回選択したものです)
Vue CLI v4.5.13 |
このあとEnterキーを押し、しばらくするとこのように表示されます。この指示に従いコマンドを実行すると、無事にサーバーが立って、ブラウザからVue.jsのサンプルページを開くことができます。
🎉 Successfully created project sample. |
DONE Compiled successfully in 3230ms 23:54:10 |
ブラウザで http://localhost:8080/ を開くと以下のページが表示されます。
Jestの単体テストを動かす
まずはJest関連のパッケージをインストールしましょう。
cd ~/sample |
jest.config.js配置
Jestのページにあるテンプレートをコピーしてプロジェクトルートに配置します。
module.exports = { |
tsconfig.json に”jest”を追記
“compilerOptions”->”types”にjestを追加します。
"types": ["webpack-env", "jest"], |
テスト用ファイル配置
export function plus(a: number, b: number): number { |
import { plus } from "../calc"; |
npm script追記
テスト用にnpm scriptを追記します。
package.jsonの”scripts”に"test": "jest"を追加しました。これでnpm run testでテストを起動できます。
"scripts": { |
単体テスト実行
テストを実行してみましょう。
npm run test |
以下のようにテスト結果が表示されます。テスト成功です!
Vue Testing Libraryを動かす
公式ページにある例を使用します。
今回は上のページの例をここまでの設定で生成されたスタイルに合わせて少し改変して使用します。
テスト用パッケージのインストール
vue-jestと記事の主役である@testing-library/vue@nextをインストールします。
@testing-library/vue@nextがVue 3用のパッケージです。@testing-library/vueはVue 3では動作しません。
@testing-library/vueで動かそうとするとvue-template-compilerのバージョンが合わない、とエラーが出ます。Vue 3 では同機能は@vue/compiler-sfcに移行しているようです。
cd ~/sample |
テスト用コンポーネント&テストコード配置
<template> |
import { render, fireEvent } from "@testing-library/vue"; |
jest.config.js の”transform”に追記
“transform”には以下のように、vueファイルに対してvue-jestを使うよう指示します。
"transform": { |
jestのバージョンに気を付けよう
ここまでの設定を追えてnpm run testを実行すると、以下のようにエラーが発生します。
FAIL src/tests/counter.test.ts |
https://github.com/kulshekhar/ts-jest/issues/2612 のように、
jest, ts-jestの27系でバグがあるようです。jestとts-jestは26系にします。
npm install --save-dev jest@26 ts-jest@26 |
babalの設定をする
これでもまだnpm run testを実行すると、以下のようにエラーが発生します。
● Test suite failed to run |
babelの設定が足りないようです。
今回は環境に合わせた設定をしてくれる@babel/preset-envを使用します。
npm install --save-dev @babel/preset-env |
module.exports = { |
テスト実行
npm run testを実行します。
やっと動きました!
まとめ
改めて書くと当然のことばかりですが、この記事の要点は以下の3点です。
- パッケージを使うときは、Vue 3に対応しているか確認する
- ts.config.js, jest.config.js にコンパイラ設定をちゃんと書く
- 通常の手順に沿ってもエラーが出る場合、パッケージのバージョンを確認して調べる
さいごに
この記事の存在で環境構築でハマる人が一人でも減れば幸いです。
今回は環境構築だけの内容になってしまいましたが、冒頭にも書いた通りVue Testing Libraryの詳細な記事を今後書きます。お楽しみに。
これまでWeb記事を書いたことがなかったので、自分にとってはフューチャー技術ブログのみならず人生初となる記事でした。
記事を書くことで自分が理解している領域と理解していない領域の境界が明確になることと、記事を書くために調べることで理解している領域が少しだけ広がることを感じました。
新卒研修後すぐの2021年1月から技術ブログ運営をしている真野さん(記事)のいるプロジェクトにアサインされ、さらにフューチャー技術ブログのエースである澁川さん(記事)にOJTを見て頂くという恵まれた環境に置かれたことへの感謝を今後の自身の成長と記事の執筆につなげていきたいと思います。