UNPKG

cypress-upload-file-post-form

Version:

Solution for two Cypress testing use-cases I came across with: perform a direct http FORM request to the server containing a file and other parameters and upload a file into a form before submission

54 lines (50 loc) 1.77 kB
// *********************************************** // This example commands.js shows you how to // create various custom commands and overwrite // existing commands. // // For more comprehensive examples of custom // commands please read more here: // https://on.cypress.io/custom-commands // *********************************************** // // // -- This is a parent command -- // Cypress.Commands.add("login", (email, password) => { ... }) // // // -- This is a child command -- // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) // // // -- This is a dual command -- // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) // // // -- This is will overwrite an existing command -- // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) Cypress.Commands.add('upload_file', (fileName, fileType = ' ', selector) => { cy.get(selector).then(subject => { cy.fixture(fileName, 'base64') .then(Cypress.Blob.base64StringToBlob) .then(blob => { const el = subject[0] const testFile = new File([blob], fileName, { type: fileType }) const dataTransfer = new DataTransfer() dataTransfer.items.add(testFile) el.files = dataTransfer.files }) }) }) // Performs an XMLHttpRequest instead of a cy.request (able to send data as FormData - multipart/form-data) Cypress.Commands.add('form_request', (method, url, formData, done) => { const xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.onload = function () { done(xhr); }; xhr.onerror = function () { done(xhr); }; xhr.send(formData); })