CodeceptJS + NightmareJSでSSLのエラーを無視する設定

Aug 30, 2020 16:45 · 880 words · 2 minute read CodeceptJS Docker

テスト用のCodeceptJS周りをDockerに移行しました。
NightmareJSでエラーが発生したので、エラーの内容と解決方法を残しておきます。

以前の記事はこちら。
CodeceptJS + PuppeteerでWebアプリの動作テストを自動化した

目次

環境

  • Docker
  • CodeceptJS
  • NightmareJS

CodeceptJSの公式ドキュメントに記載されているDockerコンテナを利用しました。
このコンテナには、最初からCodeceptJSとNightmareJSが動作する環境が整っています。

Codeceptjs Docker

Testing with Nightmare

NightmareJSとは?

以前はPhantomJSを簡単に扱うためのラッパーツールだったようですが、現在はPhantomJSではなくElectronに入れ替わっているようです。
NightmareJSを使うことで、ヘッドレスブラウザでWebアプリを動作させたり、画面のキャプチャを取得することができます。

segmentio/nightmare (GitHub)

www.nightmarejs.org

エラー内容

codecept.conf.jsの内容をNightmareJS用に変更したところ、「Step-by-step preview: file:///tests/output/records.html」に真っ白な画像だけが残されていました。
エラーメッセージに従い、「–verbose」オプションをつけて実行してみます。

Run with --verbose flag to see NodeJS stacktrace

「–verbose」をつけて実行した結果が下記です。これだけでは何が原因なのかわかりません。

  Error: navigation error
      at unserializeError (/codecept/node_modules/nightmare/lib/ipc.js:162:13)
      at EventEmitter.<anonymous> (/codecept/node_modules/nightmare/lib/ipc.js:89:13)
      at ChildProcess.<anonymous> (/codecept/node_modules/nightmare/lib/ipc.js:49:10)
      at emit (internal/child_process.js:876:12)
      at processTicksAndRejections (internal/process/task_queues.js:81:21)


  FAIL  | 0 passed, 1 failed   // 3s
    Emitted | global.result ([object Object])
◉ Step-by-step preview: file:///tests/output/records.html
    Emitted | global.after ([object Object])

原因と解決方法

テスト対象のWebアプリで自己発行証明書を利用していたことが原因で、エラーが発生していました。
証明書エラーを無視する設定を追加したところ、無事に動作しました。

      switches: {
        'ignore-certificate-errors': true
      },

の部分を追加しています。

exports.config = {
  tests: './*_test.js',
  output: './output',
  helpers: {
    Nightmare: {
      url: 'https://********/',  
      switches: {
        'ignore-certificate-errors': true
      },
      show: false,
      restart: false
    },
  },
  include: {
    I: './steps_file.js'
  },
  plugins: {
    stepByStepReport: {
        enabled: true,
        deleteSuccessful: false,
    },
  },
  bootstrap: null,
  mocha: {},
  name: '********',
}

最後に

今回のエラーについて、日本語の情報が無いようでしたので、記事にしました。
同じエラーが発生している誰かの助けになれば幸いです。

tweet Share