npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

Iโ€™ve always been into building performant and accessible sites, but lately Iโ€™ve been taking it extremely seriously. So much so that Iโ€™ve been building a tool to help me optimize and monitor the sites that I build to make sure that Iโ€™m making an attempt to offer the best experience to those who visit them. If youโ€™re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, ๐Ÿ‘‹, Iโ€™m Ryan Hefnerย  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If youโ€™re interested in other things Iโ€™m working on, follow me on Twitter or check out the open source projects Iโ€™ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soonโ€“ish.

Open Software & Tools

This site wouldnโ€™t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you ๐Ÿ™

ยฉ 2024 โ€“ย Pkg Stats / Ryan Hefner

cypress-mailhog

v2.5.0

Published

Cypress Commands for MailHog ๐ŸŒณ๐Ÿ—

Downloads

73,074

Readme

cypress-mailhog

A collection of useful Cypress commands for MailHog ๐Ÿ—.

This package supports TypeScript out of the box.

Setup

Install this package:

# npm
npm install --save-dev cypress-mailhog

# yarn
yarn add --dev cypress-mailhog

# pnpm
pnpm add -D cypress-mailhog

Include this package into your Cypress command file:

// cypress/support/commands
import 'cypress-mailhog';

Add the base url of your MailHog installation in the e2e block of your cypress.config.ts / cypress.config.js:

export default defineConfig({
  projectId: "****",
  env: {
    mailHogUrl: "http://localhost:8090/",
  },
});

MailHog authentication (Basic Auth)

If your MailHog instance uses authentication, add mailHogAuth to your cypress env config:

{
  ...
  "mailHogAuth": {"user": "mailhog username", "pass": "mailhog password"}
}

or add mailHogUsername and mailHogPassword in cypress env config

{
  ...
  "mailHogUsername": "mailhog username",
  "mailHogPassword": "mailhog password"
}

Commands

Mail Collection

mhGetAllMails( limit=50, options={timeout=defaultCommandTimeout} )

Yields an array of all the mails stored in MailHog. This retries automatically until mails are found (or until timeout is reached).

cy
  .mhGetAllMails()
  .should('have.length', 1);

mhGetMailsBySubject( subject, limit=50, options={timeout=defaultCommandTimeout} )

Fetches all mails from MailHog and yields an array of all mails with given subject. This retries automatically until mails are found (or until timeout is reached).

cy
  .mhGetMailsBySubject('My Subject')
  .should('have.length', 1);

mhGetMailsBySender( from, limit=50, options={timeout=defaultCommandTimeout} )

Fetches all mails from MailHog and yields an array of all mails with given sender. This retries automatically until mails are found (or until timeout is reached).

cy
  .mhGetMailsBySender('[email protected]')
  .should('have.length', 1);

mhGetMailsByRecipient( recipient, limit=50 )

Fetches all mails from MailHog and yields an array of all mails with given recipient.

cy
  .mhGetMailsByRecipient('[email protected]')
  .should('have.length', 1);

mhFirst()

Yields the first mail of the loaded selection.

cy
  .mhGetAllMails()
  .should('have.length', 1)
  .mhFirst();

mhDeleteAll(options={timeout=requestTimeout})

Deletes all stored mails from MailHog.

cy.mhDeleteAll();

Mail Searching

mhSearchMails( kind, query, limit=50, options={timeout=defaultCommandTimeout} )

Yields an array of mails matching the search query. This retries automatically until mails are found (or until timeout is reached).

Possible search kinds are from (sender), to (recipient) or containing (subject).

cy
  .mhSearchMails('containing', 'My favorite subject')
  .should('have.length', 1)
  .mhFirst();

Collection Filtering ๐Ÿชฎ

Note: the below described filter functions can be chained together to build complex filters. They are currently not automatically retrying. So make sure to either wait a certain time before fetching your mails or to implement you own re-try logic.

mhFilterBySubject( subject )

Filters the current mails in context by subject and returns the filtered mail list.

cy
  .mhGetMailsBySender('[email protected]')
  .mhFilterBySubject('My Subject')
  .should('have.length', 1);

mhFilterByRecipient( recipient )

Filters the current mails in context by recipient and returns the filtered mail list.

cy
  .mhGetMailsBySender('[email protected]')
  .mhFilterByRecipient('[email protected]')
  .should('have.length', 1);

mhFilterBySender( sender )

Filters the current mails in context by sender and returns the filtered mail list.

cy
  .mhGetMailsByRecipient('[email protected]')
  .mhFilterBySender('[email protected]')
  .should('have.length', 1);

Chaining Filters

Filters can be infinitely chained together.

cy
  .mhGetAllMails()
  .mhFilterBySubject('My Subject')
  .mhFilterByRecipient('[email protected]')
  .mhFilterBySender('[email protected]')
  .should('have.length', 1);

Handling a Single Mail โœ‰๏ธ

mhGetSubject()

Yields the subject of the current mail.

cy
  .mhGetAllMails()
  .should('have.length', 1)
  .mhFirst()
  .mhGetSubject()
  .should('eq', 'My Mails Subject');

mhGetBody()

Yields the body of the current mail.

cy
  .mhGetAllMails()
  .should('have.length', 1)
  .mhFirst()
  .mhGetBody()
  .should('contain', 'Part of the Message Body');

mhGetSender()

Yields the sender of the current mail.

cy
  .mhGetAllMails()
  .should('have.length', 1)
  .mhFirst()
  .mhGetSender()
  .should('eq', '[email protected]');

mhGetRecipients()

Yields the recipient of the current mail.

cy
  .mhGetAllMails()
  .should('have.length', 1)
  .mhFirst()
  .mhGetRecipients()
  .should('contain', '[email protected]');

mhGetAttachments()

Yields the list of all file names of the attachments of the current mail.

cy
  .mhGetAllMails()
  .should('have.length', 1)
  .mhFirst()
  .mhGetAttachments()
  .should('have.length', 2)
  .should('include', 'sample.pdf');

Asserting the Mail Collection ๐Ÿ”

mhHasMailWithSubject( subject )

Asserts if there is a mail with given subject.

cy.mhHasMailWithSubject('My Subject');

mhHasMailFrom( from )

Asserts if there is a mail from given sender.

cy.mhHasMailFrom('[email protected]');

mhHasMailTo( recipient )

Asserts if there is a mail to given recipient (looks for "To", "CC" and "BCC").

cy.mhHasMailTo('[email protected]');

Helper Functions โš™๏ธ

mhWaitForMails( moreMailsThen = 0 )

Waits until more then <moreMailsThen> mails are available on MailHog. This is especially useful when using the mhFilterBy<X> functions, since they do not support automatic retrying.

// this waits until there are at least 10 mails on MailHog
cy
  .mhWaitForMails(9)
  .mhGetAllMails()
  .mhFilterBySender("[email protected]")
  .should("have.length", 1);

Jim Chaos Monkey ๐Ÿต

mhGetJimMode()

Returns if Jim is enabled / disabled.

cy
  .mhGetJimMode()
  .should('eq', true);

mhSetJimMode( enabled )

Enables / Disables Jim chaos monkey.

cy
  .mhSetJimMode(true)
  .mhGetJimMode()
  .should('eq', true);

Package Development

Start Local Test Server

Navigate into the test-server directory.

cd ./test-server/

Install dependencies.

composer install
yarn # or npm install

Start docker server.

docker-compose up

Open the test page in your browser: http://localhost:3000/cypress-mh-tests/

Open MailHog in your browser: http://localhost:8090/

Open the Cypress testclient.

yarn cypress:open