こんにちは、フルスタックエンジニアのryuです。
今回の記事では、Nuxt.jsにJestを導入してユニットテストを自動化する方法を解説します。Jestとは、Javascriptのテストを自動化するツールです。JestをNuxt.jsに導入する方法と簡単なユニットテストを実装してみましょう。
Nuxt.jsにJestを導入する方法¶
Nuxt.jsでどうやってユニットテストをすればいいの?
今回の記事では、Nuxt.jsでJestを導入する方法を解説します。Jestを導入してユニットテストを自動化してみましょう。
今回の記事の内容は以下の通りです。
- Nuxt.jsにJestを導入する
- 自動テストを実行してみる
- ユニットテストコードを書いてみる
では、詳しく解説します!
Nuxt.jsにJestを導入する¶
では、Nuxt.jsにJestを導入する方法を解説します。Nuxt.jsではアプリ作成時にJestを導入することができるので簡単にインストールすることができます。
以下のようにコマンドを入力して、Nuxt.jsのアプリを作成します。
npx create-nuxt-app jestapp
アプリ作成時に「Testing framework」でJestを選択しましょう。
これで導入が完了です!
アプリ作成後にJestを導入する場合¶
Nuxt.jsのアプリ作成後に導入する場合は、Jestをnpmコマンドやyarnコマンドを使用してインストールします。
npm i @vue/test-utils babel-core@^7.0.0-bridge.0 babel-jest jest vue-jest
そして、package.jsonファイルにjestコマンドが使用できるように記述します。
{
"scripts": {
...
"test": "jest"
}
}
jest.config.jsファイルをルートディレクトリに追加して以下のように設定します。コピペでOKです。
module.exports = {
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
'^~/(.*)$': '<rootDir>/$1',
'^vue$': 'vue/dist/vue.common.js',
},
moduleFileExtensions: ['js', 'vue', 'json'],
transform: {
'^.+\\.js$': 'babel-jest',
'.*\\.(vue)$': 'vue-jest',
},
collectCoverage: true,
collectCoverageFrom: [
'<rootDir>/components/**/*.vue',
'<rootDir>/pages/**/*.vue',
],
}
最後に「.babelrc」ファイルをルートディレクトリに作成して、以下のように記述します。
{
"env": {
"test": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
}
}
これで、Jestの導入が完了です。テストコードはまだないので、後ほど作成していきます。
Jestの導入方法については、こちらの記事を参考にしています。
Configure Jest in Nuxt.js – DEV Community
Jestで自動テストを実行してみよう!¶
アプリ作成時にJestを導入すると、サンプルのテストコードが作成されます。testディレクトリ配下にLogo.spec.jsファイルがあります。これがテストコードです。
Jestのテストコードは「*.spec.js」という拡張子で作成しましょう。
テストの実行は下記のコマンドで実行します。
npm run test
テストを実行すると、PASSという文字が返ってきます。失敗するとエラーが返ってきます。
このように、コマンドを入力することで自動テストを実行することができます。
次に簡単なテストコードを自分で書いてみましょう。
Jestのテストコードを書いてみる¶
ここからは、自分でJestのテストコードを書いてみましょう。
まず、テストするWebページを作成しましょう。
テスト用のWebページを作成する¶
テスト用のWebページを作成しましょう。簡単に”Hello World”と出力するだけのWebページです。
pagesディレクトリ配下のindex.vueを以下のように書き換えましょう。
<template>
<div>
<p>Hello World</p>
</div>
</template>
Jestのテストコードを作成する¶
次にJestのテストコードを作成しましょう。
テストの内容は”Hello World”と出力されていることを確認するものです。testディレクトリ配下にHellow.spec.jsファイルを作成しましょう。
import { mount } from '@vue/test-utils'
import Hello from '@/pages/index'
describe('HelloWorld', () => {
test('display Hello World', () => {
const wrapper = mount(Hello)
expect(wrapper.text()).toBe("Hello World")
})
})
Jestファイルの書き方については、別の記事で解説したいと思います。
テストファイルの作成が完了したら、コマンドを実行してテストしてみましょう。
npm run test
テストが成功することが確認できます。
これでJestの導入は完了です!
Nuxt.jsにJestを導入する方法まとめ¶
今回の記事では、Nuxt.jsでJestを導入する方法を解説しました。JestはNuxtアプリを作成するときにインストールするのが楽です。
アプリ開発する際はCI/CDを導入して、デプロイとテストを自動化して、アプリ開発のスピードを上げましょう。AWSでのパイプラインの構築方法は、こちらの記事で解説しています。
- CodeCommitの使い方解説【リポジトリ作成からpushまで】
- CodeBuildを使ってSPAアプリをS3で公開する方法解説!【初心者でも設定可能】
- [CodePipelineの使い方を解説!【CodeBuildと連携してS3にデプロイする】](/codepipeline-how-to-use/)
Jestの使い方などは今後さらに詳しく解説します!
テスト自動化についてのオススメ参考書はこちらです。
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject\=a; b[a]\=b[a]||function(){arguments.currentScript\=c.currentScript ||c.scripts[c.scripts.length-2];(b[a].q\=b[a].q||[]).push(arguments)}; c.getElementById(a)||(d\=c.createElement(f),d.src\=g, d.id\=a,e\=c.getElementsByTagName("body")[0],e.appendChild(d))}) (window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink"); msmaflink({"n":"フロントエンド開発入門 プロフェッショナルな開発ツールと設計・実装","b":"秀和システム","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51WuogurA3L._SL500_.jpg","\/31wfAAoU5qL._SL500_.jpg","\/41sUZ9i8EZL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4798061778","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4798061778","a_id":1841358,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80%20%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%81%AA%E9%96%8B%E7%99%BA%E3%83%84%E3%83%BC%E3%83%AB%E3%81%A8%E8%A8%AD%E8%A8%88%E3%83%BB%E5%AE%9F%E8%A3%85\/","a_id":1841357,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"S4pkc","s":"s"});
リンク
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject\=a; b[a]\=b[a]||function(){arguments.currentScript\=c.currentScript ||c.scripts[c.scripts.length-2];(b[a].q\=b[a].q||[]).push(arguments)}; c.getElementById(a)||(d\=c.createElement(f),d.src\=g, d.id\=a,e\=c.getElementsByTagName("body")[0],e.appendChild(d))}) (window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink"); msmaflink({"n":"テスト駆動開発","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51qh3suMX0L._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B077D2L69C","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B077D2L69C","a_id":1841358,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA\/","a_id":1841357,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"Qohqk","s":"s"});
リンク
あわせて読みたい - 【最新】おすすめVue.jsの参考書5選ご紹介!【現役エンジニアが解説】