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

问题描述 投票:9回答:3

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

我应该使用before hook在每个测试文件中调用我的login命令,还是有办法在所有测试之前执行一次?

cypress
3个回答
12
投票

简短的回答:你可以在beforesupportFile)的the file that is loaded automatically before your other spec files钩子中写下你的登录命令。这个before钩子将在你的其他测试文件中的任何代码之前运行。


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

  • 如果您想为一次测试不同地为数据库设定种子,该怎么办?
  • 如果您想以具有不同权限的其他用户身份登录,该怎么办?
  • 如果你需要在onBeforeLoad做一次怎么办?

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

我还建议你在beforeEachavoid sharing any state in between tests钩子中输入你的登录命令。


-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
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.