我正在尝试比较Cypress中的两个JSON文件。
为了查看这是否有效,我只是制作了一个data.json
的副本,并将其副本重命名为data2.json
。
var comparejson = cy.readFile('data2.json')
cy
.readFile('data.json')
.then(json => JSON.stringify(json)).should('eq', JSON.parse(comparejson))
这是我得到的错误:
SyntaxError: Unexpected token o in JSON at position 1
啊,可怕的token o
。它从[object Object]
中读取"o",这是一个普通Ol'JavaScript对象的toString
表示。
顺便说一句,您可以通过输入JavaScript REPL和:来自己测试这一点
08:54 $ node
Welcome to Node.js v13.0.1.
Type ".help" for more information.
> JSON.parse({}.toString())
Thrown:
SyntaxError: Unexpected token o in JSON at position 1
> ({}).toString()
'[object Object]'
因此,在未来,任何时候你看到这个错误,你都知道你在某个地方跳过了字符串化的一步!
这里的技巧是readFile
返回一个对象(不是字符串,JSON文件由Cypress解析为JavaScript(,但您在对象上调用JSON.parse
。
试试这个:
cy
.readFile('data2.json')
.then(data2 => cy.readFile('data.json').should('deep.equal', data2))
注意这里deep.equal
的使用,因为我们在比较对象。