Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Cypress进行所有测试之前,我如何执行代码?_Cypress - Fatal编程技术网

在使用Cypress进行所有测试之前,我如何执行代码?

在使用Cypress进行所有测试之前,我如何执行代码?,cypress,Cypress,基本上,我想在所有文件中的所有测试执行之前登录一次 我应该使用before钩子在每个测试文件中调用我的login命令,还是有任何方法在所有测试之前调用一次?简短回答:您可以在支持文件()中的之前的钩子中编写登录命令。此before钩子将在其他测试文件中的任何代码之前运行 建议:也就是说,这种方法对于您将来可能需要的单个测试文件的变化几乎没有灵活性,例如: 如果要为一个测试对数据库进行不同的种子设定,该怎么办 如果您想以具有不同权限的不同用户身份登录,该怎么办 如果您需要在加载前执行一次操作,

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


我应该使用before钩子在每个测试文件中调用我的login命令,还是有任何方法在所有测试之前调用一次?

简短回答:您可以在
支持文件
()中的
之前的
钩子中编写登录命令。此
before
钩子将在其他测试文件中的任何代码之前运行


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

  • 如果要为一个测试对数据库进行不同的种子设定,该怎么办
  • 如果您想以具有不同权限的不同用户身份登录,该怎么办
  • 如果您需要在加载前执行一次
    操作,该怎么办
我建议将login命令放在每个spec文件的
之前的
钩子中


我还进一步建议在每次
钩住之前在
中使用login命令

我会在每次测试之前登录,因为在以前的测试中可能会发生影响当前测试结果的事情。有了新的登录,您每次都可以从一个干净的状态开始。如果您想测试一个不相关操作的“链”(操作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
})
您应该在每个测试文件中包含beforeach块。此块应登录并导航到相关页面

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

我已经阅读了有关supportFile的内容,但我不确定它是否能够处理网络请求等异步代码。通过处理,我的意思是,在启动测试之前,确保此文件中执行的所有异步任务都已解决。除了在其他规范文件之前加载之外,
supportFile
与其他规范文件没有什么不同。如果您希望处理一些异步请求,那么应该使用before钩子。那么before钩子在其他框架中等同于beforeAll
?很高兴知道,因为在每次访问之前都要说`在运行时,当您只是测试页面上是否存在一堆静态特性时,这真的很乏味。是的,在
之前的
钩子相当于在
之前的
钩子。为什么您要在每次测试之前强制登录?我大体上同意避免在测试之间共享状态的决定,但我非常喜欢使用日志之类的东西这是一个例外。登录通常需要一秒钟或更长时间。为什么要在每个测试中增加这一开销?我认为更好的替代方法是使用它来加快测试速度。@erandros我可以理解您的担忧。我个人认为最好注意登录和状态/会话共享,也许是重新登录f另一个需要考虑的是使用Cy.Revestor()来发布登录来登录用户,而不是使用UI来登录,因为它更快(在登录后也可以抓取或处理Cookie)。.一般来说,尽管我认为Jennifer警告在测试之间共享状态是正确的。理想情况下,运行测试的顺序不应影响测试结果。”…在以前的测试中可能会发生影响当前测试结果的事情…”--如果你写的是好的测试,就不应该。测试不应该依赖于单独测试中的任何状态更改,也不应该进行永久性的更改或延续到其他测试中。模仿你需要的!我认为@GrayedFox没有理解你试图解释的要点。基本上,他表达了与你试图表达的想法相同的想法。+1到com补偿某人给你的不公平的否决票。这正是我想要的。我想在块中所有测试之前运行代码。