InfraAcademy

InfraAcademy Blog

【Nuxt.js】Jestを導入してユニットテストを自動化してみよう【Jestで単体テストを実行する】

| #vue.js #nuxt.js #ci/cd #jest

こんにちは、フルスタックエンジニアの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を導入する これで導入が完了です!

アプリ作成後に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のサンプルコード 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でのパイプラインの構築方法は、こちらの記事で解説しています。

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選ご紹介!【現役エンジニアが解説】

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

Related

関連記事

ブログ一覧へ