使用请求方法登录Cypress

2024-03-31

我注册并登录用户,但是,当在测试中导航到身份验证后面的页面时,Cypress 失败并将我带回登录页面。从它的外观来看,before函数已成功执行(由 API 日志验证)。这是我的代码:

describe("Dashboard page", () => {
  before(() => {
    cy.fixture("authUserRegistrationDetail.json").then(userDetail => {
      cy.fixture("authUserLoginDetail.json").then(userLoginDetail => {
        cy.visit("http://localhost:3000/login");
        cy.get(".cookieConsent button").click();
        // create a random email for registration
        userDetail.email = `${Math.random()
          .toString(36)
          .slice(-5)}@aaa.aaa`;
        // share the email between userLogin & userRegistration obj
        userLoginDetail.email = userDetail.email;
        // register the user
        cy.request("POST", "http://localhost:9000/users/", userDetail)
          .its("body")
        // login the same user
        cy.request("POST", "http://localhost:9000/api-token-auth/", userLoginDetail).then($res => {
          cy.request({
            url: "http://localhost:9000/loggedinuser/",
            headers: {
              Authorization: `Token ${$res.body.token}`
            }
          });
        });
      });
    });
  });

  // run the test
  it("visits the dashboard...", () => {
    cy.visit("http://localhost:3000/dashboard/");
    cy.get("h2").contains("Your deals");
  });
});

代码运行后,测试断言失败,用户未登录。这是测试结果的屏幕截图。当用户注册然后登录时,我收到状态代码 200。为什么用户登录在测试中没有持续存在并且仪表板链接失败。

编辑: 我刚刚意识到我正在以编程方式登录,但是,一旦登录,我如何让赛普拉斯浏览器识别状态变化以及用户已登录。即,如何刷新赛普拉斯屏幕以识别用户登录?


从上面的代码来看,您似乎并没有在登录后保留 cookie。Cypress 在每次测试之前会自动清除所有 cookie,以防止状态建立。您应该能够执行类似的操作:

before(() => {..cy.login() })

beforeEach(() => {
    Cypress.Cookies.preserveOnce('session_id', 'remember_token')
})

这个柏树 doco 应该提供更多背景信息https://docs.cypress.io/api/cypress-api/cookies.html#Preserve-Once https://docs.cypress.io/api/cypress-api/cookies.html#Preserve-Once

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用请求方法登录Cypress 的相关文章

随机推荐

  • 如何在 R 中创建具有特定间隔的向量?

    我有一个关于创建向量的问题 如果我做a lt 1 10 a 的值为 1 2 3 4 5 6 7 8 9 10 我的问题是如何创建一个元素之间具有特定间隔的向量 例如 我想创建一个具有从 1 到 100 的值的向量 但仅以 5 为间隔进行计数
  • 如何将config.properties转换为键值对?

    我正在尝试将 java 属性文件转换为可以在 jquery 中使用的键值对 属性文件发送如下所示的信息 company1 Google company2 eBay company3 Yahoo 我想要这种形式 var obj company
  • Flutter - 主动检查是否按下了特殊键(如 ctrl)

    Question How to actively check if a certain decoration key is pressed like CTRL or SHIFT like if SomeKeyboardRelatedServ
  • 在 Spring Boot 应用程序的生产中使用 Tomcat

    作为 Spring Boot 的新手 我需要了解以下内容 因为我无法直接找到谷歌结果 他们在现实生活中真正使用哪些应用程序服务器来部署这些 Spring Boot 应用程序 Tomcat 真的被公司使用吗 如果是的话 他们是通过集群来实现的
  • 在 WCF 代理中实现 Ws 安全

    我已将基于轴的 wsdl 导入到 VS 2008 项目中作为服务参考 我需要能够传递安全详细信息 例如用户名 密码和随机数值 来调用基于轴的服务 我已经考虑过为 wse 做这件事 我知道世界讨厌它 那里没有问题 我对 WCF 的经验很少 但
  • 如何更新StackPanel的布局?

    问题是 如果您单击按钮并展开电话号码 堆栈面板和边框会展开 这很好 但如果您折叠它 堆栈面板和边框不会折叠
  • 使用 Robolectric 更改配置

    为了在配置更改时保留 AsyncTasks 我使用基于片段的解决方案和 setRetainInstance true 它托管每个 AsyncTask 并回调侦听 Activity 类似于此解决方案http www androiddesign
  • Typescript 属性“property”在类型“void | ”上不存在样本

    根据打字稿void is a 超类型 https www typescriptlang org docs handbook basic types html void of the null and undefined类型 因此 具有 vo
  • Silverlight 3.0 - 如何从 UserControl 访问 MainPage 控件值

    我需要从 MainPage 检索一些控件值到 UserControl 在此 UserControl 中 我需要能够获取 Frame ActualWidth 和 Frame ActualHeight 值 在本例中 Frame 元素位于 Mai
  • 如何在普通的非Android Java应用程序中使用NDK编译的JNI库?

    我有一个 JNI 库 供 Android 应用程序与 NDK 一起使用 我没有源代码 只是为某些拱门编译了 so 文件 我想在 64 位 x86 Linux PC 上的简单控制台 Java 应用程序中调用该库中的函数 我做了什么 我从 x8
  • Google Spanner 中的 TrueTime API 是什么?

    我多次尝试阅读该文档 但未能理解它 有人可以用通俗的语言解释一下吗 TrueTime 是 Google 提供的一个 API 可直接暴露时钟不确定性 相比标准日期时间库 https docs python org 2 library date
  • 如何取消使用锚标记放置的复选框的分组

    我们在文档中使用 AnchorTags 将签名元素放入 PDF 文档中 到目前为止 诸如 SignHere 之类的签名元素已按预期工作 每个签名只需单击一下 即可正确放入文档中 我们现在尝试使用 AnchorTags 将复选框添加到这些文档
  • 使用 GORM 在 MySQL 中获取 NULL 日期时间值

    我想获取最后一个 Visit details 行 其 out time 为NULL使用戈尔姆 NIL本身是一种类型 其中 VisitDetail OutTime 是mysql NullTime Code var visitDetail mo
  • 使用 OR 条件左连接两个 R 数据框

    Problem 我有两个数据框 我想使用三个非数字变量的条件语句来连接它们 这是我想要实现的伪代码版本 Join DF1 and DF2 on DF1 A DF2 A DF1 A DF2 B Dataset 这是创建两个数据框的一些代码 v
  • 使用 PHP 更新 AD 密码的问题

    您好 我编写了以下脚本来更新特定用户的密码
  • Apache Flink - 作业内部无法识别自定义 java 选项

    我已将以下行添加到 flink conf yaml 中 env java opts Ddy props path PATH TO PROPS FILE 启动 jobmanager jobmanager sh start cluster 时
  • 编译器优化导致程序崩溃

    我正在用 C Qt 编写一个程序 其中包含图形文件解析器 我用g 编译项目 在开发过程中 我不断比较有关优化和调试信息的不同编译器标志之间的低级解析器层的性能 以及 Qt 的调试标志 打开 关闭 qDebug 和 Q ASSERT 现在我面
  • 解析 NSURL mailto

    如何解析 mailto 请求 mailto email protected cdn cgi l email protection email protected cdn cgi l email protection subject This
  • 为什么 Python 将制表符视为 8 个空格?

    使用 4 个空格的制表符宽度已成为编程中的主要选择 那么为什么 Python 不将制表符视为 4 个空格而不是 8 个空格呢 这个设计决定有 技术 历史 其他 原因吗 感觉这可以让开发人员免于因缩进不一致而苦苦挣扎 由于Linux控制台中默
  • 使用请求方法登录Cypress

    我注册并登录用户 但是 当在测试中导航到身份验证后面的页面时 Cypress 失败并将我带回登录页面 从它的外观来看 before函数已成功执行 由 API 日志验证 这是我的代码 describe Dashboard page gt be