Cypress.io中的cy.readFile和cy.fixture有什么区别?

时间:2018-08-15 23:35:43

标签: javascript cypress

Cypress.io中的cy.readFile和cy.fixture有什么区别?在什么情况下我们应该使用cy.readFile和cy.fixture?

cy.readFile('menu.json')  
cy.fixture('users/admin.json') // Get data from {fixturesFolder}/users/admin.json

1 个答案:

答案 0 :(得分:3)

有两个主要区别。


首先,这两个函数对文件路径的处理方式不同。

cy.readFile()从cypress项目文件夹,即cypress.json所在的文件夹开始。换句话说,cy.readFile("test.txt")将从(path-to-project)\test.txt中读取。

cy.fixture()从Fixtures文件夹开始。 cy.fixture("test.txt")将从(path-to-project)\cypress\fixtures\test.txt中读取。请注意,如果您在cypress.json中设置了灯具路径,则可能会有所不同。

此处似乎不支持绝对文件路径。


第二, cy.fixture()假定某些文件扩展名的编码,而cy.readFile()则不进行编码,除非至少有一种特殊情况(请参见下文)。

例如,cy.readFile('somefile.png')会将其解释为文本文档,而只是盲目地将其读取为字符串。当打印到控制台时,这会产生垃圾输出。但是,cy.fixture('somefile.png')会读入PNG文件并将其转换为base64编码的字符串。

这不是两个功能的区别,而是默认行为。如果指定编码,则两个函数的作用相同:

cy.readFile('path/to/test.png', 'base64').then(text => {
    console.log(text); // Outputs a base64 string to the console
});

cy.fixture('path/to/test.png', 'base64').then(text => {
    console.log(text); // Outputs the same base64 string to the console
});

cy.readFile()并不总是以纯文本格式阅读。 cy.readFile() gives back a Javascript object when reading JSON files

cy.readFile('test.json').then(obj => {
    // prints an object to console
    console.log(obj);
});