用Puppeteer捕获HTTP响应的正确方法是什么?

神圣的莫利

我正在尝试从用户注册中捕获http响应状态。

我的代码如下所示:

  it.only('returns a 400 response if email is taken', async () => {
    await page.goto(`${process.env.DOMAIN}/sign-up`)
    await page.waitFor('input[id="Full Name"]')

    await page.type('input[id="Full Name"]', 'Luke Skywalker')
    await page.type('input[id="Email"]', '[email protected]')
    await page.type('input[id="Password"]', 'LukeSkywalker123', {delay: 100})
    await page.click('input[type="submit"]', {delay: 1000})

    const response = await page.on('response', response => response)

    console.log('request status', response.status)
    // expect(response).toEqual(400)
  })

该文档提供了一个拦截请求并对其进行处理的示例:

await page.setRequestInterception(true);
page.on('request', request => {
  request.respond({
    status: 404,
    contentType: 'text/plain',
    body: 'Not Found!'
  });
});

而且我尝试了类似的模式,但无济于事,还有许多其他模式。我所做的一切都会返回page,这是一个我看不到状态的巨大物体。任何帮助深表感谢。

工作原理:

感谢@tomahaug指导我朝正确的方向发展。我的第一个问题是放置,在提出请求之前就需要设置侦听器,而在请求之后就已经有了它。说得通。我最大的问题是将侦听器分配给变量,以便可以将期望作为最后一行。将其分配给变量会导致page返回。我需要做的就是在监听器中运行测试。done()为我使用throws and error时,我关闭了我的测试,如下所示,这是我的代码的工作版本:

it.only('returns a 400 response if email is taken', async () => {
    await page.goto(`${process.env.DOMAIN}/sign-up`)
    await page.waitFor('input[id="Full Name"]')

    await page.type('input[id="Full Name"]', 'Luke Skywalker')
    await page.type('input[id="Email"]', '[email protected]')
    await page.type('input[id="Password"]', 'LukeSkywalker123', {delay: 100})

    await page.on('response', response => {
      if (response.request().method === 'POST' && response.url === `${process.env.USERS_API_DOMAIN}/sessions`) {
        expect(response.status).toEqual(400)
      }
    })

    await page.click('input[type="submit"]', {delay: 1000})
  })

  after(async function () {
    await browser.close()
  })

希望这对别人有帮助!

托马豪格

我相信您应该按照这些原则做一些事情。注意回调函数done

该代码的作用是,它为侦听器附加了一个侦听器,然后单击“提交”按钮。收到响应后,它将检查状态代码,将其置为有效,然后通过调用终止测试done

您可能希望有一个if-statement来检查它是您正在回调中检查的表单的实际响应,因为响应处理程序可能会为其他并发请求发出事件。

it.only('returns a 400 response if email is taken', () => {
  await page.goto(`${process.env.DOMAIN}/sign-up`)
  await page.waitFor('input[id="Full Name"]')

  await page.type('input[id="Full Name"]', 'Luke Skywalker')
  await page.type('input[id="Email"]', '[email protected]')
  await page.type('input[id="Password"]', 'LukeSkywalker123', {delay: 100})

  page.on('response', (response) => {
    if (
      response.request().method === 'POST' && 
      response.url === `${process.env.USERS_API_DOMAIN}/sessions`) 
    {
      expect(response.status).toEqual(400)
    }
  })

  await page.click('input[type="submit"]', {delay: 1000})
})

我没有测试代码,但是它应该给您正确的想法。

编辑:调整以反映最终解决的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring AOP捕获Http Status代码的正确方法是什么?

检查 http 响应中是否存在变量的正确方法是什么?

编码protobuf serializeBinary响应以通过HTTP帖子正文发送的正确方法是什么?

在http4s中发送JSON响应的正确方法是什么?

在React Native组件中处理HTTP响应的正确方法是什么

通过使用 scapy 发送 ARP 请求并捕获响应来扫描本地网络的正确方法是什么?

运送不可用的正确HTTP响应代码是什么?

捕获错误并停止程序的正确方法是什么?

从运行nodejs的webhook响应的正确方法是什么?

在Spring Webflux中处理条件响应的正确方法是什么

处理异步函数的空响应的正确方法是什么?

在Java Servlet应用程序中为HTTP 201响应设置位置标头的正确方法是什么

用抽象方法编写Javadoc的正确方法是什么

正确的方法是什么?

用delphi写入大文件的正确方法是什么

用Java声明限定词的正确方法是什么

用Java解析Float的正确方法是什么

用EF更新多对多的正确方法是什么?

用Mono压缩Flux的正确方法是什么?

用钩子复制componentDidMount的正确方法是什么?

用Java重命名文件的正确方法是什么?

用unique_ptr配对的正确方法是什么?

用Redux实施事务的正确方法是什么

用Vuex进行API调用的正确方法是什么?

编写用Flow验证的Jest测试的正确方法是什么?

用Resteasy验证请求的正确方法是什么?

用Kubernetes 1.1安装插件的正确方法是什么?

用jsdoc记录回调的正确方法是什么?

用jQuery制作新元素的正确方法是什么?