我是Java脚本和cypress的新手。 我正在使用cy.readFile命令从文件中读取内容,并将其与另一个数组(包含运行时值)进行比较。 我的目的是比较基线文件和运行时值。我尝试使用下面的断言,但失败了。
cy.readFile('Latest.txt').should('eq',tableValues1);
此断言失败-控制台输出如下所示-您可以看到预期的内容和实际的内容相同-格式相同-任何人都可以给我提示。
Actual: [
"Gender",
"Age group ",
"Source Total ",
"21 to 30 ",
"30 to 35 ",
"36 to 40 ",
"41 to 45 ",
"46 to 50 ",
"51 to 55 ",
"56 to 60 ",
"61 to 65 ",
"Over 66 ",
"123",
"%",
"%",
"%",
"%",
"%",
"%",
"%",
"%",
"%"
]
cypress_runner.js:163813
Expected: (22) ["Gender", "Age group ", "Source Total ", "21 to 30 ", "30 to 35 ", "36 to 40 ", "41 to 45 ", "46 to 50 ", "51 to 55 ", "56 to 60 ", "61 to 65 ", "Over 66 ", "123", "%", "%", "%", "%", "%", "%", "%", "%", "%"]
我也试图像
进行比较tableValues1==cy.readFile('Latest.txt');
这也返回false
答案 0 :(得分:2)
我在本地进行了测试,并且:
Latest.txt
文件重命名为Latest.json
,以便我们利用自动解析该文件的Cypress feature [
"Gender",
"Age group ",
"Source Total ",
"21 to 30 ",
"30 to 35 ",
"36 to 40 ",
"41 to 45 ",
"46 to 50 ",
"51 to 55 ",
"56 to 60 ",
"61 to 65 ",
"Over 66 ",
"123",
"%",
"%",
"%",
"%",
"%",
"%",
"%",
"%",
"%"
]
这是有效的JSON文件(您可以检查将其粘贴到a validator上)
现在,我们确定不存在任何解码问题。(因为赛普拉斯会自动将JSON文件转换为JavaScript对象),因此我们可以对其进行比较。
无论如何:赛普拉斯仍会告诉您它们并不相等,但这不是大问题,其他测试库(Jest等)有时无法像您一样进行比较。您要做的就是将两个对象都转换为基线JSON字符串并进行比较。
尝试
cy.readFile('example.json').then(json => JSON.stringify(json)).should('eq',JSON.stringify(tableValues1));
其中
cy.readFile('example.json') // reads the file as expected
.then(json => JSON.stringify(json)) // once read, it converts the file into a JSON string
.should('eq', JSON.stringify(tableValues1)); // and compare it to the stringified version of your array
它在本地对我有效,您可以在my GitHub repository上找到它,请告诉我是否还需要
答案 1 :(得分:2)
1)deep.eq
检查对象引用。您希望.txt
断言对象/数组的内容相等。
2)就像下面提到的NoriSte一样,您需要将javascript
解析为cy.readFile('example.txt')
.then(text => JSON.parse(text))
.should('deep.eq', tableValues1)
对象:
.json
或让cypress为您完成(将文件重命名为cy.readFile('example.json')
.should('deep.eq', tableValues1)
):
{{1}}