Как сопоставить тело запроса буфера с Mock Service Worker
В настоящее время я использую Nock и хочу заменить его Mock Service Worker .
С помощью Nock я могу сопоставить строковое тело запроса с предоставленным буфером:
const request = nock(hostname)
.post('/api/instance', Buffer.from(arrayBuffer))
.reply(201, json);
Я не понял, как получить тот же результат с mws, потому что тело запроса и буфер не равны. Кто-нибудь может мне помочь?
Спасибо.
1 ответ
АмД.
Во- первых, сопоставление запросов в MSW намеренно ограничено только сопоставлением метода и URL-адреса. Однако это не означает, что вы не можете реализовать более сложную логику сопоставления, когда это необходимо. Вы можете написать это в обработчике запросов:
rest.post('/api/instance', (req, res, ctx) => {
if (someMatchCriteria) {
return res(ctx.text('hello world'))
}
})
Например, в этом обработчике только те запросы, которые соответствуют
someMatchCriteria
будет использовать издевательский ответ. Все остальные (не совпадающие) запросы будут пропущены.
Вы можете получить доступ к телу текстового запроса через
req.body
. MSW преобразует все тела запросов в обычный текст, чтобы отправить его по каналу сообщений рабочему процессу. Вы можете преобразовать этот текст в Buffer и сравнить их самостоятельно.
rest.post('/api/instance', (req, res, ctx) => {
const encoder = new TextEncoder()
const text = req.body
const buffer = encoder.encode(text)
if (buffer === expectedBuffer) {
return res(ctx.text('mocked response'))
}
})
Вы можете использовать другие средства для преобразования текста в буфер. Если длина/содержимое буфера не совпадают, это, вероятно, означает, что используемое вами решение преобразования не дает правильного буферного представления строки тела запроса.