Читать файл с динамическим именем каждый раз, когда он генерируется в Cypress?

#javascript #npm #cypress #e2e-testing

#javascript #npm #cypress #e2e-тестирование

Вопрос:

Поскольку я новичок в Cypress, я должен написать тестовый пример, чтобы проверить, загружен файл или нет, я просмотрел несколько сообщений, связанных с аналогичным тестовым примером, но все они имеют тестовый пример для чтения файла со статическим именем, в моем случае я прочитал тестовый пример.для чтения файла, который загружается после нажатия кнопки загрузки, и при каждой загрузке файла у него будет динамическое имя, хотя имя файла имеет некоторые шаблоны (например. имя файла начинается с фиксированного набора символов).

Я хотел добиться чего-то подобного в cypress,

cy.readFile('C:UsersUserNameDownloads${Regular expression to match the filename pattern}

Ниже приведен фрагмент из документации cy.task(), в котором задача состоит в том, чтобы прочитать, существует файл или нет, но если имя файла не является статическим, то как этого можно достичь

 // in plugins/index.js
const fs = require('fs')

module.exports = (on, config) => {
  on('task', {
    readFileMaybe (filename) {
      if (fs.existsSync(filename)) {
        return fs.readFileSync(filename, 'utf8')
      }

      return null
    }
  })
}
  

Ответ №1:

Я не уверен, что существуют какие-либо команды для чтения файлов или для существования файлов, которые могут принимать регулярное выражение.

Вы можете прочитать C:UsersUserNameDownloads папку до и после загрузки и получить разницу.

cypress.json

 {
  "downloadsFolder": "C:UsersUserNameDownloads"
}
  

Плагины

 const fs = require('fs')

module.exports = (on, config) => {
  on('task', {
    filesInDownload (folderName) {
      return fs.readdirSync(folderName)
    }
  })
  return config
}
  

Тест

 const downloadsFolder = Cypress.config('downloadsFolder')

cy.task('filesInDownload', downloadsFolder).then(files1 => {

  // download

  cy.task('filesInDownload', downloadsFolder).then(files2 => {
    let difference = files2.filter(x => !files1.includes(x));
    expect(difference.length).to.be.gt(0)
  })
})
  

Ответ №2:

Я хотел добиться чего-то подобного в cypress,

 cy.readFile('C:UsersUserNameDownloads${Regular expression to match the filename pattern}
  

=>
Я думаю, вам нужно обойти эти случаи следующим образом:

  1. удалить все в папке
  2. using cy.readfile from readdirSync

Пример:

 const downloadsFolder = Cypress.config('downloadsFolder')

cy.task('filesInDownload', downloadsFolder).then(files1 => {

  cy.readFile('downloadsFolder'   '/'   files[0]).contains(content)

})