Saltar al contenido principal

mock

Simular la respuesta de una solicitud. Puede definir una simulación basada en un URLPattern coincidente y el encabezado y código de estado correspondientes. Llamar al método mock devuelve un objeto stub que puede usar para modificar la respuesta del recurso web.

Con el objeto stub puede devolver una respuesta personalizada o hacer que la solicitud falle.

Hay 3 formas de modificar la respuesta:

  • devolver un objeto JSON personalizado (para simular solicitudes de API)
  • reemplazar el recurso web con un archivo local (servir un archivo JavaScript modificado) o
  • redirigir el recurso a una URL diferente
información

Tenga en cuenta que el uso del comando mock requiere soporte para WebDriver Bidi. Eso suele ser el caso cuando se ejecutan pruebas localmente en un navegador basado en Chromium o en Firefox, así como si utiliza Selenium Grid v4 o superior. Si ejecuta pruebas en la nube, asegúrese de que su proveedor de servicios en la nube admita WebDriver Bidi.

información

El URLPattern es una tecnología experimental y aún no es compatible con algunos entornos, por ejemplo, Node.js. Recomendamos importar un polyfill hasta que la función tenga un soporte más amplio.

Uso
browser.mock(url, { method, requestHeaders, responseHeaders, postData, statusCode })
Parámetros
NombreTipoDetalles
urlStringurl para simular
filterOptions
opcional
MockFilterOptionsfiltrar recurso simulado por opciones adicionales
filterOptions.method
opcional
String, Functionfiltrar recurso por método HTTP
filterOptions.requestHeaders
opcional
Object, Functionfiltrar recurso por encabezados de solicitud específicos
filterOptions.responseHeaders
opcional
Object, Functionfiltrar recurso por encabezados de respuesta específicos
filterOptions.postData
opcional
String, Functionfiltrar recurso por postData de solicitud
filterOptions.statusCode
opcional
Number, Functionfiltrar recurso por código de estado de respuesta
Ejemplo
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"
})
Devuelve
  • <Mock> return: un objeto mock para modificar la respuesta

Welcome! How can I help?

WebdriverIO AI Copilot