Cypress中使用cy.writeFile追加JSON内容触发‘push is not a function’错误的问题咨询
解决Cypress中JSON对象追加属性的问题
我之前处理过类似的场景,咱们先搞清楚你遇到的问题根源,再给出解决方案:
为什么会报错list.push is not a function?
你参考的官方文档代码是针对JSON数组的操作,但你的list.json里的内容是一个JavaScript对象(结构是{ "details": {...} })。push()是数组专属的方法,对象并没有这个方法,所以调用它必然会抛出错误。
正确的对象属性追加代码
要给现有JSON对象添加新属性,直接给对象赋值即可,修改后的代码如下:
const filename = '/path/to/list.json' cy.readFile(filename).then((obj) => { // 直接给对象添加新属性 obj.item = 'example' // 将修改后的对象写回文件 cy.writeFile(filename, obj) })
执行这段代码后,你的list.json就会变成你期望的结果:
{ "details": { "name": "abc", "age": 20 }, "item": "example" }
扩展:如果需要添加多个同类项(数组形式)
要是之后你想添加多个item类型的内容,可以把item做成数组,先判断对象中是否存在该数组,不存在则初始化,再执行push操作:
const filename = '/path/to/list.json' cy.readFile(filename).then((obj) => { // 初始化items数组(如果不存在的话) if (!obj.items) { obj.items = [] } // 向数组中添加新项 obj.items.push({ item: 'example' }) cy.writeFile(filename, obj) })
此时输出的JSON结构会是:
{ "details": { "name": "abc", "age": 20 }, "items": [{"item": "example"}] }
内容的提问来源于stack exchange,提问作者Amar nath
相关产品推荐
相关产品推荐

