Testcafe为您提供了模拟请求响应的能力,我可以做到这一点
我想为所有GET/Ajax请求实现一个缓存系统
如果URL在缓存中,但对于不在缓存中的URL,它会返回一个空响应,则此操作正常。
这是因为(我想(我没有在缓存中找不到的URL上调用res.setBody((。
export const requestMock = RequestMock()
.onRequestTo({ method: 'GET', isAjax: true })
.respond(async (req: Request, res: Response & { setBody: Function }) => {
const url: string = req.url
try {
const body: string = await cache.getItem(url)
if (body) {
res.setBody(body)
}
} catch (error) {
print.error(error)
}
})
我怎样才能像res.setBody(originalBody)
那样得到原始的Response.body
?
这将需要您的代码首先实际获取数据,并将其添加到缓存中以备将来的请求但这不是嘲笑,这只是缓存
考虑使用实际的mock,例如,将对请求的响应存储在一些JSON文件中(或您在其中使用的任何格式(,并在测试应用程序试图向特定URL发出请求时返回该文件的内容。
如果您仍然想使用缓存解决方案,那么在respond
回调中,您的代码应该检查缓存中是否有针对该URL的响应。如果是,则从缓存中返回正文(就像您现在所做的那样(。如果没有,则发出此请求,将响应添加到缓存并返回响应。
为了发出请求,您可以使用fetch
API(浏览器(或使用一些库,如axios
(Node.js运行时(。