用赛普拉斯存根网络请求

时间:2019-12-26 12:13:16

标签: cypress

我正在尝试在某些我使用cypress编写的UI测试中模拟服务器。我可能犯了一些基本的错误,可能不了解柏树如何处理请求。这是我直接从expressjs复制的示例应用程序-

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello from /'));
app.get('/user', (req, res) => res.send('Hello from /user'));

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

然后使用赛普拉斯编写了一个简单的测试-


describe('Stubbed request', () => {
  it('sends whatever response you want', () => {
    cy.visit('http://localhost:3000/');
    cy.server();
    cy.route({
      method: 'GET',
      url: '/user',
      response: [],
    }).as('bar');

    cy.visit('http://localhost:3000/user'); // cy.request() has same behavior
    cy.wait('@bar');
  })
})

我希望我应该得到一个空的答复,而不是“来自用户/的问候”,因为我已经用柏树把它打断了。甚至cy.wait也失败,并显示以下消息:“ CypressError:超时重试:cy.wait()超时,等待5000ms的路由请求到第一个请求:'bar'。从未发生请求。”我显然做错了。有人可以帮我了解我在做什么错吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

您只能存根/监视在您的应用程序中创建的XHR请求。 cy.visit永远不会发出这样的xhr请求。您都不可以对cy.request发出的请求进行存根处理,因为该请求的目的是独立于所有活动网络存根使用。 这意味着,您可以对/users进行存根处理,但是在测试中,您可以使用cy.request向该路由发出真正的请求。

在您的情况下,您必须提供一个静态html网站,并明确表示包含一个按钮。在点击按钮后,您可以执行$.get(' /user')。然后,该请求将被存根。

当前我不在家,所以我无法提供一个可运行的示例。但是有了上面的提示,您应该可以做到这一点。让我知道您是否需要进一步的帮助。

您还可以查看cypress XHR API call validation in test cases。在这里,我提供了一个可运行的示例冷杉进行监听和监视。