温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Divide testcode in Cypress into code blocks
cypress

其他 - 将赛普拉斯中的测试代码划分为代码块

发布于 2020-04-14 10:56:37

我们已经编写了赛普拉斯测试,现在希望将其划分为代码块。在开始做除法之前,所有测试都相应地运行并通过。但是由于变成了块,所以我们开始收到有关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()
        })
    })

查看更多

提问者
hereinsweden
被浏览
62
DurkoMatko 2020-02-03 18:23

完全有道理:)在第二个测试块“ Assignments页面”中,您尚未登录。应beforeEach在每个测试块中使用hook进行登录在赛普拉斯中,每个测试都在干净的画布上执行,以确保先前测试中的任何错误不会使下一个测试失败。表示您必须在每次测试前登录。这就是为什么您需要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;
       });
   };
}