/cy-verify-downloads

Cypress custom command to wait and verify that file has been downloaded

Primary LanguageJavaScriptMIT LicenseMIT

Stand With Ukraine

cy-verify-downloads tests Total npm downloads

logo

Custom Cypress command to wait and verify that file is downloaded.

Installation

npm i -D cy-verify-downloads

Extend Cypress command

This package extends Cypress' cy command.

For Cypress v10+:

Add this line to your project's cypress/support/e2e.js:

require('cy-verify-downloads').addCustomCommand();

Then you need to add the following lines of code to your project's cypress.config.js:

const { verifyDownloadTasks } = require('cy-verify-downloads');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on('task', verifyDownloadTasks);
    },
  },
});

For Cucumber:

Additionally, you may need to install and add node polyfill in your support/e2e.js file:

  1. Install the polyfill module:
npm i -D @esbuild-plugins/node-modules-polyfill
  1. Import the following code in your support/e2e.js file:
const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill');
  1. Add the following code in your plugins property:
module.exports = defineConfig({
  e2e: {
    async setupNodeEvents(on, config) {
      const bundler = createBundler({
       // add polyfill ⬇ NodeModulesPolyfillPlugin
       plugins: [NodeModulesPolyfillPlugin(), createEsbuildPlugin(config)],
      });
    }
  }
});

Moreover, you can take a look at the comment with detailed example of adding node polyfill in your config.

For Cypress v9:

So, you need to add this line to your project's cypress/support/commands.js:

require('cy-verify-downloads').addCustomCommand();

And add the following lines to your project's cypress/plugins/index.js:

const { verifyDownloadTasks } = require('cy-verify-downloads');

module.exports = (on, config) => {
  on('task', verifyDownloadTasks)
}

Usage

Then, in your test, you can use it like this:

cy.verifyDownload('picture.png');

// verify download by file extension or partial filename
cy.verifyDownload('.png', { contains: true });
cy.verifyDownload('pic', { contains: true });

// or increase timeout
cy.verifyDownload('archive.zip', { timeout: 25000 });

// or increase timeout and interval pooling
cy.verifyDownload('archive.zip', { timeout: 25000, interval: 600 });

Types

Autocompletion

To enable IntelliSense information and autocomplete you have to include types in the tsconfig.json file:

{
  "compilerOptions": {
    "types": ["cypress", "cy-verify-downloads"]
  }
}

Author

Yevhen Laichenkov elaichenkov@gmail.com

License

MIT