如何根据“before()”中接收的数据动态生成Cypress测试?

如何根据“before()”中接收的数据动态生成Cypress测试?,cypress,Cypress,非常接近我所需要的,除了URL没有提前知道(不能硬编码) URL是通过运行脚本在before()钩子中生成的: before(() => { cy.exec(<run script that generates a temporary urls.json file>); cy.readFile("./urls.json").... }); 之前(()=>{ cy.exec(); cy.readFile(“./url.json”)。。。。 });

非常接近我所需要的,除了
URL
没有提前知道(不能硬编码)

URL
是通过运行脚本在
before()
钩子中生成的:

before(() => {
  cy.exec(<run script that generates a temporary urls.json file>);
  cy.readFile("./urls.json")....
});
之前(()=>{
cy.exec();
cy.readFile(“./url.json”)。。。。
});
如何根据生成的
url.json
动态生成单独的测试


它们需要是独立测试的原因是。

测试枚举器
.forEach()
before()
钩子之前运行,但如果您确切知道需要处理多少URL,这没关系

在您引用的Cypress示例中,在
before()
中设置URL

让URL=[];
描述('Logo',()=>{
之前(()=>{
cy.exec(“npm运行生成器”)
。然后(()=>{//写入文件将是异步的
cy.readFile(“./url.json”)。然后(数据=>{
URL=数据;
});
});
})
Cypress.range(0,2).forEach(index=>{//这里只需要测试的数量
它(`Should display logo#${index}`,()=>{
const url=url[index]//在()之后运行
cy.visit(url)
...
})
})
})
注意,
url
不能再出现在测试描述中,但索引可以

如果URL的数量未知,技术上仍然可以将测试枚举数设置为最大值,但日志中的结果很混乱。未使用的测试插槽仍显示为通过


基本问题是生成器脚本需要在Cypress节点进程中运行,但规范在浏览器进程中运行

但浏览器和节点之间的ipc通信是通过异步
cy.*
命令完成的,这些命令只能在回调中运行,而回调只能在执行阶段运行

最好在外部运行生成器脚本,比如

"scripts": {
  "gen:test": "npm run generator & cypress open"
}
然后使用一个简单的
require()
提取数据

const data=require('./url.json')
让URL=data.url;
const testCount=data.url.length;
描述('Logo',()=>{
之前(()=>{
//不需要
})
Cypress.范围(0,testCount).forEach(索引=>{
或
forEach((url,索引)=>{