writeFile
Write to a file with the specified contents.
Syntax
cy.writeFile(filePath, contents)
cy.writeFile(filePath, contents, encoding)
cy.writeFile(filePath, contents, options)
cy.writeFile(filePath, contents, encoding, options)
Usage
Correct Usage
cy.writeFile('menu.json')
Arguments
filePath (String)
A path to a file within the project root (the directory that contains the Cypress configuration file)
contents (String, Array, Object or Buffer)
The contents to be written to the file.
encoding (String)
The encoding to be used when writing to the file. The following encodings are supported:
'ascii'
'base64'
'binary'
'hex'
'latin1'
'utf8'
'utf-8'
'ucs2'
'ucs-2'
'utf16le'
'utf-16le'
null
Using null
explicitly will allows you to write a Buffer
directly, without
first encoding it as a string.
options (Object)
Pass in an options object to change the default behavior of cy.writeFile()
.
Option | Default | Description |
---|---|---|
log | true | Displays the command in the Command log |
flag | w | File system flag as used with fs.writeFile |
encoding | utf8 | The encoding to be used when writing to the file |
To use encoding with other options, have your options object be your third
parameter and include encoding there. This is the same behavior as
fs.writeFile
.
Yields
-
cy.writeFile()
yields the value of thecontents
argument.
Examples
Text
txt
file
Write some text to a If the path to the file does not exist, the file and its path will be created. If the file already exists, it will be over-written.
cy.writeFile('path/to/message.txt', 'Hello World')
cy.readFile('path/to/message.txt').then((text) => {
expect(text).to.equal('Hello World') // true
})
{projectRoot}/path/to/message.txt
will be created with the following contents:
"Hello World"
JSON
Write JSON to a file
JavaScript arrays and objects are stringified and formatted into text.
cy.writeFile('path/to/data.json', { name: 'Eliza', email: 'eliza@example.com' })
cy.readFile('path/to/data.json').then((user) => {
expect(user.name).to.equal('Eliza') // true
})
{projectRoot}/path/to/data.json
will be created with the following contents:
{
"name": "Eliza",
"email": "eliza@example.com"
}
Write response data to a fixture file
cy.request('https://jsonplaceholder.typicode.com/users').then((response) => {
cy.writeFile('cypress/fixtures/users.json', response.body)
})
// our fixture file is now generated and can be used
cy.fixture('users').then((users) => {
expect(users[0].name).to.exist
})
Encoding
Specify the encoding as a String
cy.writeFile('path/to/ascii.txt', 'Hello World', 'ascii'))
{projectRoot}/path/to/message.txt
will be created with the following contents:
Hello World
Specify the encoding as part of the options object
cy.writeFile('path/to/ascii.txt', 'Hello World', {
encoding: 'ascii',
flag: 'a+',
})
Flags
Append contents to the end of a file
cy.writeFile('path/to/message.txt', 'Hello World', { flag: 'a+' })
Note that appending assumes plain text file. If you want to merge a JSON object for example, you need to read it first, add new properties, then write the combined result back.
const filename = '/path/to/file.json'
cy.readFile(filename).then((obj) => {
obj.id = '1234'
// write the merged object
cy.writeFile(filename, obj)
})
Similarly, if you need to push new items to an array
const filename = '/path/to/list.json'
cy.readFile(filename).then((list) => {
list.push({ item: 'example' })
// write the merged array
cy.writeFile(filename, list)
})
Buffer
Write a buffer directly without encoding as a string
const filename = '/path/to/file.png'
cy.readFile(filename, null).then((obj) => {
// <Buffer ef 3a bf ... >
cy.writeFile(filename, obj, null)
})
Rules
Requirements
-
cy.writeFile()
requires being chained off ofcy
. -
cy.writeFile()
requires the file be successfully written to disk. Anything preventing this such as OS permission issues will cause it to fail.
Assertions
cy.writeFile()
will only run assertions you have chained once, and will not retry.
Timeouts
cy.writeFile()
should never time out.
Because cy.writeFile()
is asynchronous it is technically possible for there to
be a timeout while talking to the internal Cypress automation APIs. But for
practical purposes it should never happen.
Command Log
Write an array to a file
cy.writeFile('info.log', ['foo', 'bar', 'baz'])
The command above will display in the Command Log as:
When clicking on the writeFile
command within the command log, the console
outputs the following:
History
Version | Changes |
---|---|
4.0.0 | cy.writeFile() now yields null instead of contents |
3.1.1 | Added flag option and appending with a+ |
1.0.0 | cy.writeFile() command added |