Hoppa till huvudinnehåll

mock

Mock svaret på en begäran. Du kan definiera en mock baserad på ett matchande URLPattern och motsvarande header och statuskod. Att anropa mock-metoden returnerar ett stub-objekt som du kan använda för att modifiera svaret från webbresursen.

Med stub-objektet kan du antingen returnera ett anpassat svar eller få begäran att misslyckas.

Det finns 3 sätt att modifiera svaret:

  • returnera ett anpassat JSON-objekt (för att stubba API-begäran)
  • ersätta webbresurs med en lokal fil (servera en modifierad JavaScript-fil) eller
  • omdirigera resursen till en annan url
info

Observera att användning av mock-kommandot kräver stöd för WebDriver Bidi. Det är vanligtvis fallet när du kör tester lokalt i en Chromium-baserad webbläsare eller på Firefox samt om du använder Selenium Grid v4 eller högre. Om du kör tester i molnet, se till att din molnleverantör stödjer WebDriver Bidi.

info

URLPattern är en experimentell teknik och stöds ännu inte i vissa miljöer, t.ex. Node.js. Vi rekommenderar att du importerar en polyfill tills funktionen får bredare stöd.

Användning
browser.mock(url, { method, requestHeaders, responseHeaders, postData, statusCode })
Parametrar
NamnTypDetaljer
urlStringurl att mocka
filterOptions
valfritt
MockFilterOptionsfiltrera mock-resurs med ytterligare alternativ
filterOptions.method
valfritt
String, Functionfiltrera resurs efter HTTP-metod
filterOptions.requestHeaders
valfritt
Object, Functionfiltrera resurs efter specifika begärandehuvuden
filterOptions.responseHeaders
valfritt
Object, Functionfiltrera resurs efter specifika svarshuvuden
filterOptions.postData
valfritt
String, Functionfiltrera resurs efter begäran postData
filterOptions.statusCode
valfritt
Number, Functionfiltrera resurs efter svar statuskod
Exempel
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"
})
Returnerar
  • <Mock> return: ett mock-objekt för att modifiera svaret

Welcome! How can I help?

WebdriverIO AI Copilot