Testing 需要在cypress中模拟POST请求

Testing 需要在cypress中模拟POST请求,testing,cypress,e2e-testing,Testing,Cypress,E2e Testing,2016年9月更新: 我把我的问题改写了。我正在尝试使用cypress测试一个前端有角度的工作应用程序(http://localhost:4200)和一个.NET核心后端(http://localhost:5000) 当应用程序启动时,将加载一个带有用户名和密码字段的登录页面。cypress代码测试填写用户名和密码并单击submit按钮,如下面我的代码所示 单击login(submit)按钮时,会触发对.NET Core后端的POST请求。请求提交用户名和密码,如果用户经过验证,则返回一个令牌作

2016年9月更新: 我把我的问题改写了。我正在尝试使用cypress测试一个前端有角度的工作应用程序(http://localhost:4200)和一个.NET核心后端(http://localhost:5000)

当应用程序启动时,将加载一个带有用户名和密码字段的登录页面。cypress代码测试填写用户名和密码并单击submit按钮,如下面我的代码所示

单击login(submit)按钮时,会触发对.NET Core后端的POST请求。请求提交用户名和密码,如果用户经过验证,则返回一个令牌作为响应。令牌将添加到会话存储中,用户将登录。会话存储中的此令牌值表示用户已登录。添加令牌后,用户将被重定向到主页

现在后端没有运行。我需要模拟这个POST请求,以便cypress测试可以到达实际的主页

我想我需要存根这个帖子请求,但我不能让这个代码工作。请求只是中止,并在控制台上查看,它表示请求没有存根

以下是我更新的cypress代码:

  const username = 'johndoe';
  const password = 'pass1234';
  
  cy.server();
  cy.get('h1').should('contain', 'Login');
  cy.get('input[placeholder=Username]').type(username);
  cy.get('input[placeholder=Password]').type(password);
  cy.get('button[type=submit]').click();  
  cy.route({
    method: 'POST',
    url: 'http://localhost:5000/Authentication/Login',
    response: {
      access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' // some random characters
    }
  });

如果在调用POST之前设置路由(单击submit),您可能会获得更大的成功

但是,如果您的应用程序使用的是与XHR相反的方式,则core Cypress不会捕获这种类型的请求。您必须添加一个基本上修改
窗口.fetch
方法的方法,以允许
cy.route()
成功

cypress.json

{  
  "experimentalFetchPolyfill": true
}
请注意限制部分

限制
实验性的polyfill并不是万无一失的。例如,它不适用于从WebWorkers或ServiceWorker发出的获取调用。它可能不适用于流式响应和取消的XHR。这就是为什么我们认为opt-in-experimental标志是避免破坏已经在测试中的应用程序的最佳途径


您的
cy.request()的意图是什么?请注意,我正在尝试模拟登录。如果该代码登录,则值得怀疑-如果您正在存根服务器并从测试中触发登录请求,应用程序如何知道它已登录?当然,你需要点击应用程序的登录按钮或同等按钮。删除我的答案。根据eric99的链接,它不会起作用。@Ackroydd我改写了我的问题。
{  
  "experimentalFetchPolyfill": true
}