respondOnce
Only respond once with given overwrite. You can call respondOnce multiple
consecutive times and it will start with the respond you defined last. If you
only use respondOnce and the resource is called more times a mock has been
defined than it defaults back to the original resource.
Usage
mock.respondOnce(overwrites, { header, statusCode, fetchResponse })
Parameters
| Name | Type | Details |
|---|---|---|
overwrites | MockOverwrite | payload to overwrite the response |
paramsoptional | MockResponseParams | additional respond parameters to overwrite |
params.headeroptional | Object | overwrite specific headers |
params.statusCodeoptional | Number | overwrite response status code |
params.fetchResponseoptional | Boolean | fetch real response before responding with mocked data |
Example
respondOnce.js
async function getToDos () {
await $('#todo-list li').waitForExist()
return $$('#todo-list li').map(el => el.getText())
}
it('should demonstrate the respondOnce command', async () => {
const mock = await browser.mock('https://todo-backend-express-knex.herokuapp.com/', {
method: 'get'
})
mock.respondOnce([{
title: '3'
}, {
title: '2'
}, {
title: '1'
}])
mock.respondOnce([{
title: '2'
}, {
title: '1'
}])
mock.respondOnce([{
title: '1'
}])
await browser.url('https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/')
console.log(await getToDos()) // outputs [ '3', '2', '1' ]
await browser.url('https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/')
console.log(await getToDos()) // outputs [ '2', '1' ]
await browser.url('https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/')
console.log(await getToDos()) // outputs [ '1' ]
await browser.url('https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/')
console.log(await getToDos()) // outputs actual resource response
})