Spec-Zone.ru › Cypress

writeFile

Запись в файл указанного содержимого.

Синтаксис

cy.writeFile(filePath, contents)
cy.writeFile(filePath, contents, encoding)
cy.writeFile(filePath, contents, options)
cy.writeFile(filePath, contents, encoding, options)

Использование

Правильное использование

cy.writeFile('menu.json')

Аргументы

filePath (Строка)

Путь к файлу в корне проекта (каталог, содержащий стандартный cypress.json).

contents (Строка, Массив, Объект или Буфер)

Содержимое, подлежащее записи в файл.

encoding (Строка)

Кодировка, используемая при записи в файл. Поддерживаются следующие кодировки:

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

Использование null явно позволяет вам записать Buffer непосредственно, без предварительного кодирования в строку.

options (Объект)

Передайте объект options, чтобы изменить стандартное поведение cy.writeFile().

Опция Значение по умолчанию Описание
log true Отображает команду в Журнале команд
flag w Флаг файловой системы, используемый с fs.writeFile
encoding utf8 Кодировка, используемая при записи в файл
timeout defaultCommandTimeout Время ожидания .writeFile() для разрешения перед выходом за пределы таймаута

Для использования кодировки с другими опциями, сделайте объект options вашим третьим параметром и включите кодировку в него. Это поведение такое же, как у fs.writeFile.

Возвращаемые значения

  • cy.writeFile() возвращает null.

Примеры

Текст

Запись текста в файл txt

Если путь к файлу не существует, файл и его путь будут созданы. Если файл уже существует, он будет перезаписан.

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 будет создан со следующим содержимым:

 "Hello World"

JSON

Запись JSON в файл

Массивы и объекты JavaScript строятся в текстовый формат.

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 будет создан со следующим содержимым:

{
  "name": "Eliza",
  "email": "eliza@example.com"
}

Запись данных ответа в файл фикстуры

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
})

Кодировка

Указание кодировки как строки

cy.writeFile('path/to/ascii.txt', 'Hello World', 'ascii'))

{projectRoot}/path/to/message.txt будет создан со следующим содержимым:

Hello World

Указание кодировки как части объекта options

cy.writeFile('path/to/ascii.txt', 'Hello World', {
  encoding: 'ascii',
  flag: 'a+',
})

Флаги

Добавление содержимого в конец файла

cy.writeFile('path/to/message.txt', 'Hello World', { flag: 'a+' })

Обратите внимание, что добавление предполагает файл простого текста. Если вы хотите объединить, например, объект JSON, вам нужно его сначала прочитать, добавить новые свойства, а затем записать комбинированный результат.

const filename = '/path/to/file.json'

cy.readFile(filename).then((obj) => {
  obj.id = '1234'
  // write the merged object
  cy.writeFile(filename, obj)
})

Аналогично, если вам нужно добавить новые элементы в массив

const filename = '/path/to/list.json'

cy.readFile(filename).then((list) => {
  list.push({ item: 'example' })
  // write the merged array
  cy.writeFile(filename, list)
})

Буфер

Запись буфера напрямую без кодирования в строку

const filename = '/path/to/file.png'

cy.readFile(filename, null).then((obj) => {
  // <Buffer ef 3a bf ... >
  cy.writeFile(filename, obj, null)
})

Правила

Требования

  • cy.writeFile() требует цепочки вызовов от cy.
  • cy.writeFile() требует успешной записи файла на диск. Любые проблемы, такие как проблемы с правами доступа в ОС, приведут к ошибке.

Утверждения

  • cy.writeFile() выполнит утверждения, которые вы прицепили только один раз, и не повторит.

Таймауты

  • cy.writeFile() может выйти за пределы таймаута, когда кодирование записываемого содержимого занимает значительное время.

Журнал команд

Запись массива в файл

cy.writeFile('info.log', ['foo', 'bar', 'baz'])

Вышеприведенная команда отобразится в журнале команд как:

Command Log writeFile

При нажатии на команду writeFile в журнале команд консоль выводит следующее:

Console Log writeFile

История

Версия Изменения
9.2.0 Добавлена опция timeout
4.0.0 cy.writeFile() теперь возвращает null вместо contents
3.1.1 Добавлена опция flag и добавление с помощью a+
1.0.0 Добавлена команда cy.writeFile()

См. также

  • cy.readFile()

© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/writefile

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API