【问题标题】:Cypress E2E fails on basic auth赛普拉斯 E2E 在基本身份验证上失败
【发布时间】:2019-02-27 21:23:00
【问题描述】:

我正在尝试使用 cypress 通过一组完整的 e2e 测试来覆盖我们的开发服务器。

我们需要在基本的 http 身份验证下锁定我们的开发环境,这样没有适当的凭据(客户端和 api)没有人无法访问它。

当我尝试运行 Cypress 测试时,它们因此而失败。服务器(nginx)只响应 401 http-code。

我尝试在 url 中传递凭据,如“user:password@domain.com”,它部分工作:cypress 能够到达 domain.com 上的前端,但它仍然无法向我们的后端发送任何请求(api .domain.com)从页面内(使用fetch) - 可能是因为不同的子域或其他东西。

我正在寻找一种方法来强制它在域上的所有请求中使用这些凭据或任何其他可能有助于我运行测试的解决方法。

谢谢!

【问题讨论】:

  • 我也遇到过类似的情况。如果需要,有一种方法可以在测试之间保存session 数据。这就是你想要达到的目标。如果是这样,我会找出我为你做了什么。

标签: javascript authentication testing e2e-testing cypress


【解决方案1】:

这可能不是身份验证问题。 fetch 不适用于柏树。见https://github.com/cypress-io/cypress/issues/687

解决方法是将其放入您的 support/index.js 文件中:

Cypress.on("window:before:load", win => {
  win.fetch = null;
});

【讨论】:

  • 哦谢谢不知道。你知道任何可以使用 fetch 的类似框架吗?
  • 不,确实没有与 Cypress 类似的东西。也许是 Testcafe,但我更愿意使用 Cypress 并处理其当前的限制(总是会有更多的功能/修复)。需要明确的是,您仍然可以使用 Cypress 测试您要测试的任何内容,只需输入该解决方法,这样它就不会使用 fetch。我敢打赌,如果你把它放进去,你当前的测试会起作用。
  • 如果我理解正确,您上面的代码是为了禁用 fetch,但如果我的应用程序实际使用它,我应该进行模拟以添加一些请求标头,对吗?
  • 或者...如果我将window.fetch设置为null,polyfill实际上将用于通过xhr支持它并且cypress将能够拦截它...哇,这是一个棘手的解决方案: )
  • 是的,这有点像 hack,但在赛普拉斯正确支持它之前它可以工作。您可能可以模拟取而代之,但这是快速修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2021-10-23
相关资源
最近更新 更多