1

假设我有以下规范,其中包含 2 个it块,一个检查菜单项的教师角色,另一个检查学生角色。变量rolesToCheck包含将在其上被激活的角色,目前,rolesToCheck变量仅包含学生,因此它只会在第二个it阻塞时运行。有可能这样做吗?

   describe('side menu check', () => {
    var sideMenuHelper;
    var rolesToCheck = ['student'];
    beforeEach(() => {
        cy.login();
        cy.wait(5000);
    });

    it('menu item check for teacher', () => {
        .....
    })

    it('menu item check for student', () => {
        .....
    })

})
4

3 回答 3

2

请参阅这个问题How to add test case grouping in Cypress可以适应使用 rolesToCheck 数组。

const rolesToCheck = ['student'];

beforeEach(function() {

  const testName = Cypress.mocha.getRunner().test.fullTitle();
  if (!rolesToCheck.some(role => testName.includes(role))) {
    this.skip();
  }
})

it('menu item check for teacher', () => {        // skipped
    .....
})

it('menu item check for student', () => {        // run
    .....
})

当有很多测试时,您可能会发现按测试名称过滤有点困难,因此您可以使用标签

const rolesToCheck = ['student'];

beforeEach(function() {

  const tag = Cypress.mocha.getRunner().test._testConfig?.tag;
  
  if (!tag) return;    // no tag, run it 

  if (!rolesToCheck.includes(tag)) {
    this.skip();
  }
})

it('menu item check for teacher', { tag: 'teacher' }, () => {     // skipped
    .....
})

it('menu item check for student', { tag: 'student' }, () => {     // run
    .....
})

如果测试中没有定义标签,请注意可选链接。 _testConfig?.tag

于 2021-05-06T04:25:14.937 回答
1

您可以循环遍历rolesToCheck数组并基于角色登录以检查该角色的菜单项,而不是为不同的角色使用不同的it块。

你可以做这样的事情。

const rolesToCheck = ['teacher', 'student'];
rolesToCheck.forEach((role) => {
    describe('side menu check', () => {
        before(() => {
            if (role === 'teacher') {
                login as teacher
            } else if(role === 'student') {
                login as student
            }
        });

        it(`menu items check for ${role}`, () => {

        });
    });
});
于 2021-05-06T08:49:49.470 回答
1

您可以遍历rolesToCheck数组并根据数组中的角色运行测试。

describe('side menu check', () => {
    var sideMenuHelper;
    var rolesToCheck = ['student'];
    beforeEach(() => {
        cy.login();
        cy.wait(5000);
    });

    rolesToCheck.forEach(role => {
        it(`menu item check for ${role}`, () => {
            .....
        })
    })    
})
于 2021-05-06T05:16:37.737 回答