如何在赛普拉斯的所有测试套件之前执行代码

时间:2018-01-05 09:03:09

标签: cypress

基本上,我想在执行所有测试之前登录一次。我的测试文件分为几个文件。

我是否应该使用before hook在每个测试文件中调用我的login命令,或者在所有测试之前有没有办法做一次?

3 个答案:

答案 0 :(得分:11)

简答:您可以在beforethe file that is loaded automatically before your other spec files)内的supportFile挂钩中编写登录命令。此before挂钩将在其他测试文件中的任何代码之前运行。

建议:话虽如此,这种方法对于您将来可能需要的各个测试文件的变化几乎没有灵活性,例如:

  • 如果要为一次测试以不同方式为数据库设定种子,该怎么办?
  • 如果您想以具有不同权限的其他用户身份登录,该怎么办?
  • 如果您需要在onBeforeLoad执行一次操作会怎么样?

我建议只在每个单独的spec文件的before挂钩中使用login命令。

我还进一步建议您使用beforeEach挂钩avoid sharing any state in between tests登录您的登录命令。

答案 1 :(得分:-1)

我会在EACH测试之前登录,因为在之前的测试中可能会发生影响当前测试结果的事情。通过全新登录,您每次都会以干净的状态开始。如果您想测试不相关操作的“链”(操作A那么操作B),那么将其作为单独的测试编写,但在各个测试中具有基本功能。

describe('/page'), () => {
  beforeEach(() => {
    cy.login()        // custom command that hanldes login w/o UI
    cy.visit('/page') // go to the page you are testing
  })

  // tests
})

您应该在每个测试文件中包含一个beforeEach块。该块应该登录并导航到相关页面。

答案 2 :(得分:-2)

describe('Hooks', function() {
    before(function() {
        // runs once before all tests in the block
    })
})

https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests.html#Hooks