如何匹配buffer请求体和Mock Service Worker



我目前正在使用Nock,并希望用Mock Service Worker代替它。
使用Nock,我可以将字符串化的请求体与提供的缓冲区进行匹配:

const request = nock(hostname)
.post('/api/instance', Buffer.from(arrayBuffer))
.reply(201, json);

我还没有弄清楚如何获得相同的结果与mws,因为请求体和缓冲区是不相等的。有人能帮我吗?
谢谢。

AmD.

首先,MSW中的请求匹配有意地仅限于方法和URL匹配。但是,这并不意味着不能在需要时实现更复杂的匹配逻辑。您可以将其写入请求处理程序:

rest.post('/api/instance', (req, res, ctx) => {
if (someMatchCriteria) {
return res(ctx.text('hello world'))
}
})

例如,在这个处理程序中,只有匹配someMatchCriteria的请求才会使用模拟响应。所有其他(不匹配的)请求将被传递。

您可以通过req.body访问文本请求正文。MSW将所有请求体转换为纯文本,以便通过消息通道发送给工作程序。您可以将该文本转换为缓冲区并自己比较它们。

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'))
}
})

您可以使用其他方法将文本转换为缓冲区。如果缓冲区长度/内容不匹配,这可能意味着您正在使用的转换解决方案没有生成请求主体字符串的正确缓冲区表示。

最新更新