Pular para o conteúdo principal

mock

Simule a resposta de uma requisição. Você pode definir uma simulação baseada em um padrão URLPattern correspondente e cabeçalho e código de status correspondentes. Chamar o método mock retorna um objeto stub que você pode usar para modificar a resposta do recurso web.

Com o objeto stub, você pode então retornar uma resposta personalizada ou fazer com que a requisição falhe.

Existem 3 maneiras de modificar a resposta:

  • retornar um objeto JSON personalizado (para simular requisições de API)
  • substituir o recurso web por um arquivo local (servir um arquivo JavaScript modificado) ou
  • redirecionar o recurso para uma URL diferente
informação

Observe que usar o comando mock requer suporte para WebDriver Bidi. Isso geralmente é o caso quando você executa testes localmente em um navegador baseado em Chromium ou no Firefox, bem como se você usar um Selenium Grid v4 ou superior. Se você executar testes na nuvem, certifique-se de que seu provedor de nuvem suporte WebDriver Bidi.

informação

O URLPattern é uma tecnologia experimental e ainda não é suportado em alguns ambientes, como Node.js. Recomendamos importar um polyfill até que o recurso seja mais amplamente suportado.

Uso
browser.mock(url, { method, requestHeaders, responseHeaders, postData, statusCode })
Parâmetros
NomeTipoDetalhes
urlStringurl para simular
filterOptions
opcional
MockFilterOptionsfiltrar recurso simulado por opções adicionais
filterOptions.method
opcional
String, Functionfiltrar recurso por método HTTP
filterOptions.requestHeaders
opcional
Object, Functionfiltrar recurso por cabeçalhos de requisição específicos
filterOptions.responseHeaders
opcional
Object, Functionfiltrar recurso por cabeçalhos de resposta específicos
filterOptions.postData
opcional
String, Functionfiltrar recurso por postData da requisição
filterOptions.statusCode
opcional
Number, Functionfiltrar recurso por código de status da resposta
Exemplo
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"
})
Retorna
  • <Mock> return: um objeto mock para modificar a resposta

Welcome! How can I help?

WebdriverIO AI Copilot