■ はじめに
NightWatch について、業務で扱いそうなので予習。
目次
【1】NightWatch とは? 【2】環境設定 【3】E2E関連のディレクトリ構成 【4】テスト実行 【5】独自のテストを作成してみる
【1】NightWatch とは?
* Node.js上で動作するE2E のテストフレームワーク * 詳細は、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2021/03/04/172003
【2】環境設定
今回は、簡単な方法である 新規でVueプロジェクトを作成する場合について扱う
前提条件
* npm, Java がインストールされていること
手順
https://dk521123.hatenablog.com/entry/2020/12/22/192553
の「例:vue init コマンド」にあるように
コマンド/出力 一部抜粋
vue init webpack my-app ・・・略・・・ ? Setup e2e tests with Nightwatch? Yes
補足:既にVueプロジェクトはあるが未インストールの場合
https://www.npmjs.com/package/@vue/cli-plugin-e2e-nightwatch
より抜粋 Installing in an Already Created Project ~~~~~ vue add e2e-nightwatch ~~~~~
【3】E2E関連のディレクトリ構成
* src/test/e2e 配下にある * 詳細な説明は、以下のサイトを参照。
https://www.npmjs.com/package/@vue/cli-plugin-e2e-nightwatch
ディレクトリ構成
tests/e2e/ ├── custom-assertions/ ... カスタムアサーションがあるフォルダ ... (※1) | └── elementCount.js ├── custom-commands/ ... カスタムコマンドがあるフォルダ | ├── customExecute.js | ├── openHomepage.js | └── openHomepageClass.js ├── page-objects/ ... よく使うパターンを保持してあるフォルダ | └── homepage.js ├── specs/ ... テストファイルがあるフォルダ | ├── test.js ... E2Eテストファイル(サンプル) | └── test-with-pageobjects.js ├── reports/ ... テスト結果 | └── CHROME_XX.X.XXXX.XXX_Windows_test-with-pageobjects.xml └── globals.js ... グローバル設定ファイル
※1:カスタムアサーション について
* 詳細は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2021/03/06/234935
【4】テスト実行
npm run test:e2e
補足:「WARN Local Chrome version is XX...」が表示される場合
対応する場合は、以下の関連記事を参照のこと。
NightWatch に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2021/02/07/180052
【5】独自のテストを作成してみる
今回は、感じを掴むために、 Googleに対して、簡単なE2Eテストを作成してみる
テストの作成手順
1)JavaScript形式でE2Eテストファイル(※1)を作成 2)1)のファイルを「src/test/e2e/spec」配下に置く 3)実行「npm run test:e2e」(※2)
※1:E2Eテストファイル「example.js」
module.exports = { 'Demo test for Google': (browser) => { browser // 対象サイト(今回は、「google」) .url('http://www.google.com') .waitForElementVisible('body', 1000) // タイトルが「Google」かどうか確認 .assert.title('Google') // 「input[type=text]」が表示されているかどうか確認 .assert.visible('input[type=text]') // 「input[type=text]」に「nightwatch」を入力しEnterキー押下 .setValue('input[type=text]', ['nightwatch', browser.Keys.ENTER]) // 1秒待つ .pause(1000) // 「#main」に「Night」が含まれているか確認 .assert.containsText('#main', 'Night') // テスト終了 .end(); }, };
※2:テスト結果例
$ npm run test:e2e > my-app@0.1.0 test:e2e > vue-cli-service test:e2e ・・・略・・・ App is served in production mode. Note this is for preview or E2E testing only. INFO Running end-to-end tests ... ・・・略・・・ Running: Demo test for Google √ Element <body> was visible after 30 milliseconds. √ Testing if the page title equals 'Google' (12ms) √ Testing if element <input[type=text]> is visible (46ms) √ Testing if element <#main> contains text 'Night' (218ms) OK. 4 assertions passed. (3.273s) ・・・略・・・
参考文献
https://qiita.com/matsugaknight/items/a6eebd1f3697102c728b
関連記事
NightWatch ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/03/04/172003
NightWatch ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/03/05/113518
NightWatch ~ あれこれ ~
https://dk521123.hatenablog.com/entry/2021/03/08/235438
NightWatch ~ カスタムアサーション ~
https://dk521123.hatenablog.com/entry/2021/03/06/234935
NightWatch ~ スナップショットあれこれ ~
https://dk521123.hatenablog.com/entry/2021/03/07/223957
NightWatch に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2021/02/07/180052
Vue CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/22/192553
Vue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/04/30/000000