#javascript #automated-tests #cypress #cypress-file-upload
Вопрос:
Я хотел проверить, совпадает ли содержимое загруженного файла и загруженного файла. Итак, вот что я попробовал через cypress:
it.only(cfg.testname, () => {
// 1. Login to website, navigate to desired webapge
// 2. Upload the file
// 3. Download the file
// cy.wait(5000)
// 4. Read the uploaded file:
const fileContent = cy.fixture(_filePath)
console.log('fixture file path', '======>', _filePath)
console.log('fixture file content', '=====>', fileContent)
// 5. Read the downloaded file:
const downloadsFolder = Cypress.config("downloadsFolder")
const downloadedFileContent = cy.readFile(path.join(downloadsFolder, _fileName))
console.log('downloaded file path', '======>', path.join(downloadsFolder, fileName))
console.log('downloaded file content','====>', downloadedFileContent)
// 6. Check if they are equal:
expect(downloadedFileContent).equals(fileContent)
})
Однако, когда я запускаю этот тест, он даже не завершает шаг входа в систему и сразу выдает ошибку утверждения на одном шаге 6, то есть на expect()...
:
AssertionError: expected { Object (userInvocationStack, specWindow, ...) } to equal {
Object (userInvocationStack, specWindow, ...) }
at Context.eval (VM753 tests:224)
Когда я комментирую шаг 6 expect()...
, он правильно входит в систему, загружает файл и загружает файл. Итак, я почувствовал, что каким-то образом должен заставить процесс подождать, пока загрузка не будет завершена, прежде expect()...
чем . Поэтому я попытался раскомментировать cy.wait(5000)
, но безрезультатно. Это все еще дает мне вышеуказанную ошибку (с, конечно expect()...
, без комментариев).
Q1. Почему такое поведение?
Q2. Как я должен это исправить?
PS: Я получаю кучу ошибок в консоли, которые я не могу понять. Это скриншот консоли:
Ответ №1:
Чтение прибора происходит асинхронно, поэтому вам нужно использовать .then()
то же самое с cy.readFile()
Использование path.join(downloadsFolder, _fileName)
, вероятно, не сработает, так как это команда узла, вместо этого замените шаблон строки
Если у вас сложный файл в формате JSON, также попробуйте .to.deep.eq
cy.fixture(_filePath).then(fileContent => {
const downloadsFolder = Cypress.config("downloadsFolder")
const downloadPath = `${downloadsFolder}/${_fileName}`
cy.readFile(downloadPath).then(downloadedFileContent => {
expect(downloadedFileContent).equals(fileContent)
// or may need deep
// expect(downloadedFileContent).to.deep.eq(fileContent)
})
})