Przejdź do głównej treści

mock

Zasymuluj odpowiedź żądania. Możesz zdefiniować pozorowanie (mock) na podstawie pasującego URLPattern i odpowiednich nagłówków oraz kodu statusu. Wywołanie metody mock zwraca obiekt stub, którego możesz użyć do modyfikacji odpowiedzi zasobu internetowego.

Za pomocą obiektu stub możesz albo zwrócić niestandardową odpowiedź, albo spowodować niepowodzenie żądania.

Istnieją 3 sposoby modyfikacji odpowiedzi:

  • zwrócenie niestandardowego obiektu JSON (do symulowania żądań API)
  • zastąpienie zasobu internetowego lokalnym plikiem (serwowanie zmodyfikowanego pliku JavaScript) lub
  • przekierowanie zasobu na inny adres URL
informacja

Pamiętaj, że korzystanie z polecenia mock wymaga obsługi WebDriver Bidi. Jest to zwykle możliwe podczas lokalnego uruchamiania testów w przeglądarce opartej na Chromium lub w Firefoksie, a także jeśli używasz Selenium Grid v4 lub nowszego. Jeśli uruchamiasz testy w chmurze, upewnij się, że Twój dostawca usług chmurowych obsługuje WebDriver Bidi.

informacja

URLPattern to eksperymentalna technologia, która nie jest jeszcze obsługiwana w niektórych środowiskach, np. Node.js. Zalecamy zaimportowanie polyfilla do czasu, aż funkcja będzie szerzej obsługiwana.

Użycie
browser.mock(url, { method, requestHeaders, responseHeaders, postData, statusCode })
Parametry
NazwaTypSzczegóły
urlStringadres URL do zasymulowania
filterOptions
opcjonalny
MockFilterOptionsfiltruj symulowane zasoby według dodatkowych opcji
filterOptions.method
opcjonalny
String, Functionfiltruj zasób według metody HTTP
filterOptions.requestHeaders
opcjonalny
Object, Functionfiltruj zasób według określonych nagłówków żądania
filterOptions.responseHeaders
opcjonalny
Object, Functionfiltruj zasób według określonych nagłówków odpowiedzi
filterOptions.postData
opcjonalny
String, Functionfiltruj zasób według danych postData żądania
filterOptions.statusCode
opcjonalny
Number, Functionfiltruj zasób według kodu statusu odpowiedzi
Przykład
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,
requestHeaders: { '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,
requestHeaders: (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://webdriver.io')
await browser.url('https://google.com')
console.log(await browser.getTitle()) // returns "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
})
Zwraca
  • <Mock> return: obiekt mock do modyfikacji odpowiedzi

Welcome! How can I help?

WebdriverIO AI Copilot