Cypress TypeScript:如何从DataTable取值并同步执行对应操作?
按行同步执行DataTable中state与message的对应操作
你有一个用于场景校验的DataTable,结构如下:
| state | message |
|---|---|
| Deactivated | error |
| Taken | error |
| Unused | confirmation |
步骤定义为 Given user inputs "<state>" and sees "<message>" message,但你之前的代码会先执行所有state对应的操作,再执行所有message的操作,无法按行同步配对执行,修改为map()后问题依旧。
解决方法
把每行的state操作和message操作放在同一个循环迭代里,遍历每一行时,先执行当前行的state对应操作,紧接着执行当前行的message对应操作,就能实现按行同步执行。
修改后的代码如下:
Given('user inputs {string} and sees {string} message', (dataTable: DataTable) => { // 遍历每一行数据,在同一个循环内处理当前行的state和message dataTable.hashes().forEach(elem => { // 处理当前行的state操作 if (elem.state === 'Deactivated') { <DeactivatedAction> } else if (elem.state === 'Taken') { <TakenAction> } else if (elem.state === 'Unused') { <UnusedAction> } else { throw new Error("No state defined") } // 紧接着处理当前行的message操作 if (elem.message === 'error') { <errorAction> } else if (elem.message === 'confirmation') { <confirmationAction> } else { throw new Error("No message type defined") } }) })
原代码问题说明
你之前的写法是两个独立的forEach循环:第一个循环遍历所有行执行state操作,第二个循环再遍历所有行执行message操作,这就导致所有state操作先批量完成,才会开始执行message操作,自然无法实现行级的同步配对。
内容的提问来源于stack exchange,提问作者Faith Berroya
相关产品推荐
相关产品推荐

