Как сопоставить тело запроса буфера с 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'))
  }
})

Вы можете использовать другие средства для преобразования текста в буфер. Если длина/содержимое буфера не совпадают, это, вероятно, означает, что используемое вами решение преобразования не дает правильного буферного представления строки тела запроса.

Другие вопросы по тегам