48

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

我应该使用 before 钩子在每个测试文件中调用我的登录命令,还是有什么方法可以在所有测试之前执行一次?

4

3 回答 3

58

简短的回答:您可以在(在其他规范文件之前自动加载的文件before)内的挂钩中编写登录命令。此挂钩将在您的其他测试文件中的任何代码之前运行。supportFilebefore


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

  • 如果您想为一项测试以不同的方式播种数据库怎么办?
  • 如果您想以具有不同权限的不同用户身份登录怎么办?
  • 如果你需要一次做某事怎么办onBeforeLoad

我建议before在每个单独的规范文件中将登录命令放在一个挂钩中。

我还进一步建议将您的登录命令置于beforeEach挂钩中,以避免在测试之间共享任何状态

于 2018-01-08T15:14:47.233 回答
8
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

于 2018-09-16T10:17:25.837 回答
3

我会在每次测试之前登录,因为之前的测试中可能会发生影响当前测试结果的事情。使用新登录,您每次都以干净的状态开始。如果您想测试不相关操作的“链”(操作 A THEN 操作 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 块。此块应登录并导航到相关页面。

于 2018-05-23T15:58:57.947 回答