首页 > 解决方案 > 将 Cypress 中的测试代码划分为代码块

问题描述

我们已经编写了 cypresstest,现在我们想将其划分为代码块。在开始做除代码之前,所有测试都相应地运行并通过。但是自从变成块后,我们开始收到关于 401 身份验证的错误。

这是赛普拉斯代码块的正确语法吗?

/* eslint-disable no-undef */

describe('Log in', () => {

    it('Successfully loads', function () {
        cy.visit('/')


            .get('input[type="email"]')
            .type('XXXX')
            .get('input[type="password"]')
            .type('XXXX')
            .get('[style="text-align: center;"] > .ui').click()
    })


    describe('The Assignments Page', () => {
        it('Add Assignment', function () {
            cy.get('[href="/assignments"]').click()
            cy.get('.grey').click()
            cy.get('.ui > .search').type('Astra Zeneca')
            cy.get(':nth-child(2) > .ui > input').type('System Development')
            cy.get('textarea').type('This is a short text')
            cy.get(':nth-child(4) > .ui').click()
            cy.get('a.ui').click()
        })
    })

标签: cypress

解决方案


这完全有道理:) 在第二个测试块“作业页面”中,您没有登录。您应该beforeEach在每个测试块中使用钩子登录。在 cypress 中,每个测试都在干净的画布上执行,以确保之前测试中的错误不会导致下一次测试失败。意味着您必须在每次测试前登录。这就是为什么你需要beforeEach钩子。

此外,这里的最佳做法是以编程方式登录 - 意味着不是单击输入字段并键入 (cy.type),而是发送您的登录请求cy.request并检查它是否在响应中成功。

beforeEach 钩子中的登录示例代码:

beforeEach(() => {
   cy.request({
          method: "POST",
          url: '<YOUR LOGIN ENDPOINT>',
          body: {
              email: <VALUE>,
              pass: <VALUE>
          },
          form: true
        }).then(response => {
          expect(response.status).to.eq(200);
          expect(response.body.success).to.be.true;
       });
   };
}


推荐阅读