Перейти к основному содержимому

respondOnce

Обзор​

Подменяет один ответ. Несколько вызовов respondOnce добавляют ответы в порядке вызова. Когда очередь однократных ответов исчерпана, следующие запросы получают исходные ответы сервера.

Использование​

mock.respondOnce(overwrites, params)

Параметры команды​

Параметры и их различия между BiDi и Classic/CDP совпадают с respond, включая имя headers, а не header. В BiDi тело — строка или JSON; callback тела и fetchResponse: false не поддерживаются. Запрос доходит до сервера.

В BiDi однократное правило удаляет постоянное правило и добавляется к другим однократным. В Classic/CDP ранее добавленное постоянное правило может перекрыть очередь. Не полагайтесь на одинаковое смешивание respond и respondOnce между протоколами.

BiDi синхронно возвращает тот же мок; Classic/CDP не возвращает полезного значения.

Пример​

Пример использует Chrome с WebDriver BiDi. Укажите в baseUrl адрес тестового HTTP-сервера: / отдает HTML-страницу, а /api/items — JSON с полем source: "original" и статусом 200. Явная подписка на события нужна для новых сессий в одном воркере в WDIO 9.6.2.

const assert = require("node:assert/strict");

it("mock.respondOnce: consume BiDi responses in order", async ({ browser }) => {
await browser.url("/");
await browser.sessionSubscribe({
events: ["network.beforeRequestSent", "network.responseStarted"],
});
const mock = await browser.mock("/api/items");
try {
mock.respondOnce({ source: "first" });
mock.respondOnce({ source: "second" });
const sources = [];
for (let i = 0; i < 3; i++) {
const body = await browser.execute(async () =>
(await fetch("/api/items", { cache: "no-store" })).json(),
);
sources.push(body.source);
}
assert.deepEqual(sources, ["first", "second", "original"]);
} finally {
await mock.restore();
}
});

Источники​

Материал учитывает исходную статью WebdriverIO.