Skip to main content
Cypress应用

readFile

读取文件并返回其内容。

语法

cy.readFile(filePath)
cy.readFile(filePath, encoding)
cy.readFile(filePath, options)
cy.readFile(filePath, encoding, options)

用法

正确用法

cy.readFile('menu.json')

参数

filePath (String)

项目根目录(包含Cypress配置文件的目录)中文件的路径。

encoding (String)

读取文件时使用的编码。支持以下编码:

  • 'ascii'
  • 'base64'
  • 'binary'
  • 'hex'
  • 'latin1'
  • 'utf8'
  • 'utf-8'
  • 'ucs2'
  • 'ucs-2'
  • 'utf16le'
  • 'utf-16le'
  • 'null'

显式使用null将返回一个Cypress.Buffer实例,无论文件扩展名是什么。

options (Object)

传入一个选项对象以更改cy.readFile()的默认行为。

选项默认值描述
logtrue命令日志中显示命令
timeoutdefaultCommandTimeout超时前等待cy.readFile()解析的时间

生成结果 了解主题管理

  • cy.readFile()返回文件的内容。
  • 如果链中的任何后续命令(如断言)失败,将再次从磁盘读取文件。

示例

文本

读取.txt文件

对于非JSON文件,返回文件的内容。

// path/to/message.txt

Hello World
cy.readFile('path/to/message.txt').should('eq', 'Hello World') // true

JSON

对于JSON,返回的内容会被解析为JavaScript对象。

// data.json

{
"name": "Eliza",
"email": "eliza@example.com"
}
cy.readFile('path/to/data.json').its('name').should('eq', 'Eliza') // true

YAML

从YAML文件中获取翻译数据

const YAML = require('yamljs')

cy.readFile('languages/en.yml').then((str) => {
// 将字符串解析为对象字面量
const english = YAML.parse(str)

cy.get('#sidebar')
.find('.sidebar-title')
.each(($el, i) => {
englishTitle = english.sidebar[i]

expect($el.text()).to.eq(englishTitle)
})
})

编码

使用第二个参数指定编码

cy.readFile('path/to/logo.png', 'base64').then((logo) => {
// logo将以base64编码
// 看起来应该像这样:
// aIJKnwxydrB10NVWqhlmmC+ZiWs7otHotSAAAOw==...
})

读取为Buffer

cy.fixture('path/to/logo.png', null).then((logo) => {
// logo将作为Buffer读取
// 看起来应该像这样:
// Buffer([0, 0, ...])
})

播放MP3文件

cy.readFile('audio/sound.mp3', 'base64').then((mp3) => {
const uri = 'data:audio/mp3;base64,' + mp3
const audio = new Audio(uri)

audio.play()
})

注意事项

存在性

默认的文件存在断言

默认情况下,cy.readFile()断言文件存在,如果文件不存在则会失败。如果文件最初不存在,它将重试读取文件,直到文件存在或命令超时。

// 在达到defaultCommandTimeout后失败
cy.readFile('does-not-exist.yaml')

断言文件不存在

你可以这样断言文件不存在:

// 如果文件不存在则通过
cy.readFile('does-not-exist.yaml').should('not.exist')

读取可能不存在的文件

查看我们使用cy.task()读取可能不存在的文件的示例。

重试

自动重试

cy.readFile()将继续读取文件,直到通过所有断言。

// 如果此断言失败,cy.readFile将轮询文件
// 直到最终通过其断言(或超时)
cy.readFile('some/nested/path/story.txt').should('eq', 'Once upon a time...')

从Cypress v13开始,cy.readFile()是一个查询,将继续读取文件,直到所有链式命令(不仅是断言)通过。

// 将重试直到json文件具有`users[123].name`字段,并且
// 断言通过
cy.readFile('users.json').its('users.123.name').should('eq', 'John Doe')

规则

要求 了解命令链

  • cy.readFile()需要链式调用cy
  • cy.readFile()要求文件必须存在。
  • cy.readFile()要求文件必须成功从磁盘读取。

断言 了解断言

  • cy.readFile()将自动重试,直到所有链式断言通过。

超时设置 了解超时机制

  • cy.readFile()可能会因等待添加的断言通过而超时。
  • cy.readFile()可能会因读取的内容编码耗时过长而超时。

命令日志

列出package.json文件的内容

cy.readFile('package.json')

上述命令将在命令日志中显示为:

命令日志 readFile

当点击命令日志中的readFile命令时,控制台输出如下:

控制台日志 readFile

历史

版本变更
13.0.0cy.readFile()成为查询
9.0.0更改null编码为读取为Buffer
0.17.2改进错误消息
0.17.1添加cy.readFile()命令

另请参阅