Я не уверен на 100%, насколько хорошо этот ответ преобразуется в axios
, но это возможно с fetch
, который я рекомендую вам использовать, потому что он широко поддерживается браузерами, и Stencil автоматически заполняет его при необходимости.
Для тестов e2e нашего приложения я написал следующий скрипт, который можно добавить на страницу e2e после его инициализации:
await page.addScriptTag({
content: `
window.originalFetch = window.fetch;
window.requestsToIntercept = [];
window.fetch = (...args) => (async(args) => {
const result = await this.originalFetch(...args);
for (const request of requestsToIntercept) {
if (args[0].includes(request.url)) {
result.json = async () => JSON.parse(request.response);
result.text = async () => request.response;
}
}
return result;
})(args);`,
});
Он перезаписывает реализацию fetch
и использует глобальный массив requestsToIntercept
для ответов на заглушки. Вы можете добавить вспомогательную функцию к своему коду, например
const interceptRequests = async (requests: { url: string; response: string }[]) =>
page.addScriptTag({
content: `window.requestsToIntercept.push(...${JSON.stringify(requests)});`
});
, а затем использовать ее как
interceptRequests([{ url: '/foo', response: { foo: 'bar' } }])
. Она будет перехватывать все запросы, которые включают /foo
, и вместо этого отвечать заданным ответом. .
Я оставлю на ваше усмотрение реорганизовать это в помощников так, как вы хотите. Лично я решил создать функцию, которая создает для меня newE2EPage
и добавляет interceptRequests
в качестве метода к объекту страницы.
Кстати, причина, по которой вы не можете включить перехват запросов в Puppeteer в том, что Stencil уже использует его внутри, и, следовательно, запрос уже будет обработан до того, как ваш слушатель «по запросу» включится (как говорится в сообщении об ошибке). На Github есть просьба изменить это: https://github.com/ionic-team/stencil/issues/2326.