概要

Jestは、ユニットテストを簡単に記述するために使用されるJavaScriptテストフレームワークであり、Nightwatch.jsは、すべての主要ブラウザでWebアプリケーションおよびWebサイトに対して自動エンドツーエンドテストを実行するための統合テストフレームワークです。

そのため、JestとNightwatchの機能を同時に使用するために、Nightwatchは新しい依存関係jest-environment-nightwatchを導入しました。

API

global.browser

Nightwatch browser APIオブジェクト。autoStartSessionがオフの場合、使用できません。

global.jestNightwatch

Jest環境は、Nightwatch programmatic APIを使用してNightwatchインスタンスを作成し、browser APIをエクスポートします。

利用可能なプロパティ/メソッド

  • .element(<locator>) - Nightwatch .element() APIを使用してページ内の要素を特定します。

  • .updateCapabilities({ capabilities }) - autoStartSessionがオフの場合、実行時にケーパビリティを更新するために使用されます。

  • .launchBrowser() - autoStartSessionがオフの場合、セッションを開始してブラウザを開くために使用されます。

  • .settings - Nightwatch設定オブジェクト。

  • .nightwatch_client - Nightwatch (内部) インスタンス。

設定例

ステップ 0: Nightwatchのインストール

ガイドに従うか、ビデオを見て、Nightwatchを最初からインストールします。

ステップ 1: Jestのインストール

npm i jest --save-dev

また、Jestテストを実行するために、package.jsonファイルに次のスクリプトが含まれていることを確認してください。

{
 "scripts": {
   "test": "jest"
 }
}

ステップ 2: jest-environment-nightwatchパッケージのインストールと構成

JestでNightwatchを使用するには、jest-environment-nightwatchをインストールする必要があります。Jestおよびテストに必要なその他の依存関係をインストールします。

npm i jest-environment-nightwatch --save-dev

Nightwatch Jest環境にはデフォルト設定が付属しています。ただし、必要に応じて、Jestの設定を調整できます。

jest.config.js
{
  testEnvironment: 'jest-environment-nightwatch',
  testEnvironmentOptions: {
    // Nightwatch related options
    headless: true,
    browserName: 'chrome',
    baseUrl: '',
    verbose: false,  
    output: true,
    env: null, 
    parallel: false,
    devtools: false,
    debug: false,
    autoStartSession: true,
    persistGlobals: true,
    configFile: './nightwatch.conf.js',
    globals: {}, 
    webdriver: {},
    timeout: null,
    enableGlobalApis: false,
    alwaysAsync: true,
    desiredCapabilities: {},
    async setup(browser) {},
    async teardown(browser) {},
  },
  
testMatch: [ "**/tests/*.[jt]s?(x)" ], }

testMatchにテストフォルダーディレクトリを設定できます。

Nightwatchオプション

Nightwatchのデフォルトの動作は、次の設定オプションのいずれかを指定することで変更できます。以下は、利用可能なオプションとそのデフォルト値のリストです。

名前 タイプ 説明 デフォルト
headless ブール値 Nightwatchをヘッドレスモードで実行します (Firefox、Chrome、Edgeで利用可能) true
browserName 文字列 使用するブラウザの名前。利用可能なオプションは、chrome、firefox、edge、safariです なし
baseUrl 文字列 .navigateTo()を相対URLで使用する場合に使用するベースURL。コンポーネントテストを行う場合は、Vite開発サーバーを実行しているURLに設定する必要があります。 http://localhost:3000
verbose ブール値 Nightwatchの完全なhttpログを有効にします。 false
output ブール値 Nightwatchの出力を表示します true
env 文字列 使用するNightwatchテスト環境 (nightwatch.conf.jsから)。Nightwatchドキュメントでテスト環境の詳細を確認してください。 なし
parallel ブール値 テストを並列で実行する場合は、これをtrueに設定します false
devtools ブール値 Chromeのみ: Chromeデベロッパーツールを自動的に開きます false
debug ブール値 コンポーネントテストのみ: コンポーネントのレンダリング後にテストの実行を一時停止します false
autoStartSession ブール値 Nightwatchセッションを自動的に開始します。これを無効にする場合は、テストでjestNightwatch.launchBrowser()を呼び出す必要があります。 true
persistGlobals ブール値 実行間で同じグローバルオブジェクトを保持するか、テストごとに(深い)コピーを保持します。Nightwatchドキュメントでテストグローバルの詳細を確認してください。 true
configFile 文字列 使用するNightwatch設定ファイル。設定ファイルはデフォルトで自動生成されますが、これにより変更できます。NightwatchドキュメントでNightwatch設定の詳細を確認してください。 ./nightwatch.conf.js
globals オブジェクト Nightwatchで使用するグローバルのリスト。グローバルはbrowser.globalsで利用可能です。NightwatchドキュメントでNightwatchテストグローバルの詳細を確認してください。 なし
webdriver オブジェクト Nightwatch WebDriverサービスを構成するためのWebDriver関連設定のリスト。NightwatchドキュメントでNightwatch WebDriver設定の詳細を確認してください。NightwatchドキュメントでNightwatch WebDriver設定を確認してください。 なし
timeout 数値 アサーションが失敗する前にアサーションの再試行を行うためのグローバルタイムアウトを設定します。 5000
enableGlobalApis ブール値 NightwatchグローバルAPI (element()、expect()) は、デフォルトで無効になっています。 false
desiredCapabilities オブジェクト 現在のセッションのカスタムSeleniumケーパビリティを定義します。Nightwatchドキュメントで、使用されている特定のブラウザドライバーの詳細を確認してください。 なし
setup() 関数 Nightwatchの起動後に実行される追加のセットアップフック。 なし
teardown() 関数 Nightwatch APIオブジェクトで実行される追加のティアダウンフック。 なし

ステップ 3: 例のテストの実行

以下の例のテストを考えてみましょう

describe('duckduckgo example', function() {
  it('Search Nightwatch.js and check results', function(browser) {
    browser
      .navigateTo('https://duckduckgo.com')
      .waitForElementVisible('#search_form_input_homepage')
      .sendKeys('#search_form_input_homepage', ['Nightwatch.js'])
      .click('#search_button_homepage')
      .assert.visible('.results--main')
      .assert.textContains('.results--main', 'Nightwatch.js');
  }); 
});

注意: Jestはフックの命名規則が異なるため、テストがこのガイドに従っていることを確認する必要があります。*

ステップ 4: Jestテストランナーの結果の表示