Cypress 在所有测试之前运行

Cypress 在所有测试之前运行,cypress,Cypress,我正在尝试使用cy.writeFile根据api编写fixture文件。我需要在任何Cypress测试运行之前生成这些fixture文件,因为所有测试都将使用这些fixture文件。我只需要在任何测试运行之前运行一次,而不是每次测试之前 我已经尝试在/cypress/support/index.js文件中添加一个before函数,但在我运行“cypress run”时,它不会创建fixture文件 在我使用“cypress run”运行任何测试之前,是否应该先运行这个before hook?是的

我正在尝试使用cy.writeFile根据api编写fixture文件。我需要在任何Cypress测试运行之前生成这些fixture文件,因为所有测试都将使用这些fixture文件。我只需要在任何测试运行之前运行一次,而不是每次测试之前

我已经尝试在/cypress/support/index.js文件中添加一个before函数,但在我运行“cypress run”时,它不会创建fixture文件


在我使用“cypress run”运行任何测试之前,是否应该先运行这个before hook?

是的,它应该在您的任何测试之前运行

由于请求失败,因此未创建设备。这是由于许多原因造成的,例如:当Cypress运行时api没有准备好,或者它需要身份验证。。。你最好再检查一下

我举了个例子。在启动cypressThread cy:run之前,必须确保api服务器(Thread start:mock)和Web服务器(Thread start)都已准备就绪



另请注意,support/index.js中的before()函数没有运行一次,因为假设您有3个测试文件,然后执行了3次

谢谢你。事实上,before()在每个测试套件之前运行,这对我来说是一个破坏者。我只需要一个一次性钩子就可以使用cy.writeFile访问几个api端点并将json文件写入cypress装置。然后,我使用这些装置来剔除输入测试的xhr。似乎在Cypress测试运行之前会有一个一次性的钩子运行。现在,我想出了这个解决方案:使用npm脚本来完成我需要的任务。“预构建:e2e”:“npm运行开始:web服务器&&./node_modules/.bin/cypress运行--spec'cypress/integration/writefixturereflesfromapi.spec.ts”,“e2e”:“./node_modules/.bin/server测试开始:web服务器http-get://localhost:4200 cypress:运行测试“,@lance-p在本例中,在启动cypress之前,您需要一个调用api并将响应写入文件的小型nodeJS脚本。
import './commands'

before(function() {
   // runs once before all tests in the block
    const apiUrl = 'http://localhost:8080/api/';
    const fixturesPath = 'cypress/fixtures/';
    const fixtureExtension = '.json';

    let routePath = 'locations';
    cy.request(`${apiUrl}${routePath}`).then((response) => {
      cy.writeFile(`${fixturesPath}${path}${fixtureExtension}`, response.body);
    });
 });