メインコンテンツにスキップ

mock

リクエストのレスポンスをモックします。マッチングするグロブと対応するヘッダーおよびステータスコードに基づいてモックを定義できます。mockメソッドを呼び出すと、Webリソースのレスポンスを変更するために使用できるスタブオブジェクトが返されます。

スタブオブジェクトを使用すると、カスタムレスポンスを返すか、リクエストを失敗させることができます。

レスポンスを変更するには3つの方法があります。

  • カスタムJSONオブジェクトを返す(APIリクエストのスタブ用)
  • Webリソースをローカルファイルに置き換える(変更されたJavaScriptファイルを提供する)または
  • リソースを別のURLにリダイレクトする
情報

mock コマンドを使用するには、Chrome DevTools プロトコルのサポートが必要であることに注意してください。このサポートは、Chromium ベースのブラウザーでローカルにテストを実行する場合、または Selenium Grid v4 以降を使用する場合に提供されます。このコマンドは、クラウドで自動テストを実行する場合は**使用できません**。詳細については、自動化プロトコルのセクションを参照してください。

使い方
browser.mock(url, { method, headers, responseHeaders, postData, statusCode })
パラメーター
名前タイプ詳細
url文字列モックするURL
filterOptions
オプション
MockFilterOptions追加オプションでモックリソースをフィルター
filterOptions.method文字列関数HTTPメソッドでリソースをフィルター
filterOptions.headersオブジェクト関数特定のリクエストヘッダーでリソースをフィルター
filterOptions.responseHeadersオブジェクト関数特定のリスポンスヘッダーでリソースをフィルター
filterOptions.postData文字列関数リクエストのpostDataでリソースをフィルター
filterOptions.statusCode数値関数レスポンスのステータスコードでリソースをフィルター
mock.js
it('should mock network resources', async () => {
// via static string
const userListMock = await browser.mock('**' + '/users/list')
// or as regular expression
const userListMock = await browser.mock(/https:\/\/(domainA|domainB)\.com\/.+/)
// you can also specifying the mock even more by filtering resources
// by request or response headers, status code, postData, e.g. mock only responses with specific
// header set and statusCode
const strictMock = await browser.mock('**', {
// mock all json responses
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
responseHeaders: { 'Cache-Control': 'no-cache' },
postData: 'foobar'
})

// comparator function
const apiV1Mock = await browser.mock('**' + '/api/v1', {
statusCode: (statusCode) => statusCode >= 200 && statusCode <= 203,
headers: (headers) => headers['Authorization'] && headers['Authorization'].startsWith('Bearer '),
responseHeaders: (headers) => headers['Impersonation'],
postData: (data) => typeof data === 'string' && data.includes('foo')
})
})

it('should modify API responses', async () => {
// filter by method
const todoMock = await browser.mock('**' + '/todos', {
method: 'get'
})

// mock an endpoint with a fixed fixture
todoMock.respond([{
title: 'Injected Todo',
order: null,
completed: false,
url: "http://todo-backend-express-knex.herokuapp.com/916"
}])

// respond with different status code or header
todoMock.respond([{
title: 'Injected Todo',
order: null,
completed: false,
url: "http://todo-backend-express-knex.herokuapp.com/916"
}], {
statusCode: 404,
headers: {
'x-custom-header': 'foobar'
}
})
})

it('should modify text assets', async () => {
const scriptMock = await browser.mock('**' + '/script.min.js')
scriptMock.respond('./tests/fixtures/script.js')
})

it('should redirect web resources', async () => {
const headerMock = await browser.mock('**' + '/header.png')
headerMock.respond('https://media.giphy.com/media/F9hQLAVhWnL56/giphy.gif')

const pageMock = await browser.mock('https://google.com/')
pageMock.respond('https://webdriverio.dokyumento.jp')
await browser.url('https://google.com')
console.log(await browser.getTitle()) // returns "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
})

ようこそ!何かお手伝いできることはありますか?

WebdriverIO AI Copilot