mock
Simuler la réponse d'une requête. Vous pouvez définir une simulation basée sur un URLPattern correspondant et des en-têtes et codes d'état correspondants. L'appel de la méthode mock renvoie un objet stub que vous pouvez utiliser pour modifier la réponse de la ressource web.
Avec l'objet stub, vous pouvez soit renvoyer une réponse personnalisée, soit faire échouer la requête.
Il existe 3 façons de modifier la réponse :
- renvoyer un objet JSON personnalisé (pour simuler une requête API)
- remplacer une ressource web par un fichier local (servir un fichier JavaScript modifié) ou
- rediriger la ressource vers une URL différente
Notez que l'utilisation de la commande mock
nécessite la prise en charge de WebDriver Bidi. C'est
généralement le cas lorsque vous exécutez des tests localement dans un navigateur basé sur Chromium ou sur
Firefox, ainsi que si vous utilisez Selenium Grid v4 ou supérieur. Si vous exécutez des tests
dans le cloud, assurez-vous que votre fournisseur cloud prend en charge WebDriver Bidi.
L'URLPattern
est une technologie expérimentale et n'est pas encore prise en charge dans certains environnements, par exemple Node.js.
Nous vous recommandons d'importer un polyfill
jusqu'à ce que la fonctionnalité soit plus largement prise en charge.
Utilisation
browser.mock(url, { method, requestHeaders, responseHeaders, postData, statusCode })
Paramètres
Nom | Type | Détails |
---|---|---|
url | String | url à simuler |
filterOptions optionnel | MockFilterOptions | filtrer la ressource simulée par des options supplémentaires |
filterOptions.method optionnel | String, Function | filtrer la ressource par méthode HTTP |
filterOptions.requestHeaders optionnel | Object, Function | filtrer la ressource par en-têtes de requête spécifiques |
filterOptions.responseHeaders optionnel | Object, Function | filtrer la ressource par en-têtes de réponse spécifiques |
filterOptions.postData optionnel | String, Function | filtrer la ressource par les données postData de la requête |
filterOptions.statusCode optionnel | Number, Function | filtrer la ressource par code d'état de la réponse |
Exemple
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"
})
Retourne
- <Mock>
return
: un objet mock pour modifier la réponse