用cypress存根网络请求

用cypress存根网络请求,cypress,Cypress,我试图在我正在使用cypress编写的一些UI测试中模拟服务器。我可能犯了一些基本的错误,可能不理解cypress是如何存根请求的。下面是我直接从expressjs复制的一个示例应用程序- const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => res.send('Hello from /')); app.get('/user', (req,

我试图在我正在使用cypress编写的一些UI测试中模拟服务器。我可能犯了一些基本的错误,可能不理解cypress是如何存根请求的。下面是我直接从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}!`));
然后用cypress编写了一个简单的测试-


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


我希望不是“Hello from user/”,而是得到一个空的响应,因为我已经用cypress将它存根了。甚至cy.wait也会失败,并显示消息-“CypresError:Timed out retrying:cy.wait()在等待5000ms后超时,等待发送到路由的第一个请求:“bar”。从未发生任何请求。“我显然做错了什么。”。有人能帮我理解我做错了什么吗?提前谢谢

您只能在应用程序中创建存根/间谍XHR请求
cy.visit
永远不会提出这样的xhr请求。您也不能对使用
cy.request
发出的请求进行存根,因为这些请求与所有活动网络存根无关。 这意味着,您可以存根
/users
,但在测试中,您可以使用
cy.request
向该路由发出真正的请求

在您的情况下,您必须提供一个带有express的静态html站点,例如包含一个按钮。单击按钮后,您可以执行例如
$.get('/user')
。然后这个请求将被存根

目前我不在家,因此无法提供可运行的示例。但是有了上面的提示,你应该能够做到这一点。如果你需要进一步的帮助,请告诉我


你也可以看看。在这里,我提供了一个可运行的例子,即冷杉存根和间谍活动。

感谢您的帮助,约瑟夫。我现在可以使用您提到的方法来存根请求。