Cypress写入JSON文件旧数据被覆盖的解决方法咨询
解决Cypress中cy.writeFile覆盖JSON旧数据的问题
问题出在cy.writeFile默认是覆盖写入模式,每次调用都会替换文件原有内容。要实现追加/合并数据,得先读取旧文件内容,合并新数据后再写入。
另外你原来的代码有个明显问题:直接往opt_task(Cypress返回的DOM元素集合对象)里push数据是错误的,这会污染DOM对象,应该单独维护业务数据数组。
修正后的完整代码
cy.get('.form').find('.row').eq(20).find('.ng-untouched').then($optTask => { // 提取要保存的新数据 let newTask = {}; if ($optTask[0].innerText) { newTask = { opt_task_description: $optTask[0].innerText }; } else if ($optTask[0].value) { newTask = { opt_task_description: $optTask[0].value }; } // 读取现有JSON文件,文件不存在时返回空数组 cy.readFile(task_json, { log: false }).then(existingTasks => { // 确保读取到的内容是数组(首次写入时文件不存在,会返回undefined) const updatedTasks = Array.isArray(existingTasks) ? existingTasks : []; // 追加新数据到数组 updatedTasks.push(newTask); // 写入合并后的数据 cy.writeFile(task_json, updatedTasks); }); });
关键要点
- 先读再写:通过
cy.readFile获取文件已有的数据,避免直接覆盖 - 处理空文件/首次写入:判断读取结果是否为数组,不是的话初始化为空数组,防止报错
- 分离DOM对象和数据:不要修改Cypress返回的DOM元素集合,单独存储要保存的业务数据
如果你的场景是要合并对象(比如更新已有条目而非追加新条目),可以在读取旧数据后,通过遍历找到对应条目进行更新,再写入文件。
内容的提问来源于stack exchange,提问作者Dave Han
相关产品推荐
相关产品推荐

