如何在 TestCafe RequestMock 中获得原始响应

How can I get original response in TestCafe RequestMock

Testcafe 让您能够模拟请求的响应,我可以做到。

我想为所有 GET/Ajax 请求实施一个缓存系统。
如果 URL 在缓存中,这很好用,但对于那些不在缓存中的,它 returns 是一个空响应。

这是因为(我想)我没有对缓存中未找到的 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)
    }
  })

我怎样才能通过这种方式获得原始 Response.body res.setBody(originalBody)

这需要您的代码首先实际去获取数据并将其添加到缓存以供将来请求使用。 但这不是模拟,这只是缓存。

考虑使用实际模拟,例如当被测试的应用程序试图向特定 URL 发出请求时,将对请求的响应存储在某些 JSON 文件(或您在那里使用的任何格式)和 return 文件的内容中。

如果您仍然想使用缓存解决方案,在您的 respond 回调中,您的代码应该检查缓存中是否有针对 URL 的响应。如果是,则缓存中的 return 正文(就像您现在所做的那样)。如果否,则发出此请求,将响应添加到缓存和 return 响应。

要发出请求,您可以使用 fetch API(浏览器)或使用某些库,例如 axios(Node.js 运行时)。