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

时间:2021-05-24 08:26:25

标签: typescript testing automated-tests e2e-testing testcafe

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

我怎样才能以这种方式获得原始的 Response.bodyres.setBody(originalBody)

1 个答案:

答案 0 :(得分:1)

这将要求您的代码首先实际去获取数据并将其添加到缓存中以备将来的请求。 但这不是嘲笑,这只是缓存。

考虑使用实际的模拟,例如将请求的响应存储在某些 JSON 文件(或您在其中使用的任何格式)中,并在测试的应用尝试向特定 URL 发出请求时返回此文件的内容。

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

为了发出请求,您可以使用 fetch API(浏览器)或使用诸如 axios(Node.js 运行时)之类的库。