概要

ウェブサイトのテスト中に、ウェブサイトが特定のURLにHTTPリクエストを送信するケースがありますが、テスト実行中にそのURLにリクエストを送信せず、代わりにそのURLからのレスポンスをモックしたい場合があります。Nightwatchを使用すると、それが可能になりました。

Selenium 4で利用可能になったChrome DevTools Protocol のサポートにより、NightwatchはHTTPリクエストのインターセプトと、特定のURLからのレスポンスのモックをサポートするようになりました。

このコマンドは、Google ChromeやMicrosoft EdgeなどのChromiumベースのブラウザでのみ機能します。

モックネットワークレスポンス

このコマンドを使用すると、特定のURLからのHTTPレスポンスをモックできます。このコマンドを実行した後、HTTPリクエストのURLがコマンドに渡されたURLと厳密に一致するたびに、リクエストはインターセプトされ、提供されたモックがレスポンスとしてブラウザに送り返されます。

必要なパラメータを使用して、ウェブサイトに移動する前に`browser.mockNetworkResponse()`コマンドを呼び出すだけです。

`mockNetworkResponse()`は、最初の引数として`url`(文字列型)、2番目の引数として`response`オブジェクトを受け取ります。`response`オブジェクトの仕様は以下のとおりです。

キー デフォルト 説明
status 数値 200 モックレスポンスのHTTPステータス。
headers オブジェクト {} モックレスポンスのHTTPヘッダー。
例: `headers = {'Connection': 'Keep-Alive', 'Content-Type': 'UTF-8'}`
body
オプション
文字列 '' モックレスポンスの本文。

tests/mock-network-response.js
describe('mock network response', function() {
  it('intercepts the request made to Google search and mocks its response', function() {
    browser
      .mockNetworkResponse('https://www.google.com/', {
        status: 200,
        headers: {
          'Content-Type': 'UTF-8'
        },
        body: 'Hello there!'
      })
      .navigateTo('https://www.google.com/')
      .pause(2000);
  });
});