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

@minoris/jest-dom-mocks

v2.2.1

Published

Downloads

27

Readme

@minoris/jest-dom-mocks

Build Status License: MIT npm version

Jest mocking utilities for working with the DOM.

Installation

$ yarn add @minoris/jest-dom-mocks

Setup

This package provides two methods that should be included in the jest setup files:

  • ensureMocksReset
  • installMockStorage

ensureMocksReset

Should be called in the beforeEach method of the jest each-test setup file. For example:

import {ensureMocksReset} from '@minoris/jest-dom-mocks';

beforeEach(() => {
  ensureMocksReset();
});

this will ensure that appropriate error messages are shown if a DOM object is mocked without beign restored for the next test.

installMockStorage

Should be called in the jest setup file. For example:

import {installMockStorage} from '@minoris/jest-dom-mocks';

installMockStorage();

this will install the localStorage and sessionStorage mocks onto the global window object.

Example Usage

In this example, we are testing a NumberTransitioner component using Jest and Enzyme. Note that parts of this file have been omitted in order to focus in on the relevant parts of the example.

import {clock, animationFrame} from '@minoris/jest-dom-mocks';

it('transitions to the next number after being updated', () => {
  clock.mock();
  animationFrame.mock();

  const duration = 1000;
  const rendered = mount(
    <NumberTransitioner duration={duration}>{100}</NumberTransitioner>,
  );
  rendered.setProps({children: 200});

  clock.tick(duration / 4);
  animationFrame.runFrame();
  expect(rendered.text()).toBe('125');

  clock.tick(duration / 2);
  animationFrame.runFrame();
  expect(rendered.text()).toBe('175');

  clock.restore();
  animationFrame.restore();
});

API Reference

The mocks provided can be divided into 3 primary categories:

  • standard mocks
  • fetch mock
  • storage mocks

Standard Mocks

The following standard mocks are available:

  • animationFrame
  • clock
  • location
  • matchMedia
  • timer

Each of the standard mocks can be installed, for a given test, using standardMock.mock(), and must be restored before the end of the test using standardMock.restore().

For example:

import {location} from '@minoris/jest-dom-mocks';

beforeEach(() => {
  location.mock();
});

afterEach(() => {
  location.restore();
});

it('does a thing', () => {
  // run test code here
});

Or, if you just need to mock something for a single test:

import {location} from '@minoris/jest-dom-mocks';

it('does a thing', () => {
  location.mock();

  // run test code here

  location.restore();
});

Some of the standard mocks include additional features:

AnimationFrame.runFrame(): void

Executes all queued animation callbacks.

Clock.mock(now: number | Date): void

In addition to the usual .mock() functionality (with no arguments), the Clock object can be mocked by passing in a number or Date object to use as the current system time.

Clock.tick(time: number): void

Ticks the mocked Clock ahead by time milliseconds.

Clock.setTime(time: number): void

Sets the system time to the given time.

MatchMedia.mock(media?: MediaMatching): void

In addition to the usual .mock() functionality (with no arguments), the MatchMedia object can be mocked by passing in a MediaMatching function to use as the implementation.

The MediaMatching function has the following interface:

interface MediaMatching {
  (mediaQuery: string): Partial<MediaQueryList>;
}

it takes a mediaQuery string as input and returns a partial MediaQueryList to use as the result of window.matchMedia(mediaQuery). The partial result will be merged with the default values:

{
  media: '',
  addListener: noop,
  removeListener: noop,
  matches: false
}

MatchMedia.setMedia(media?: MediaMatching): void

Sets the implementation function for the mocked MatchMedia object. see above (MatchMedia.mock(media?: MediaMatching): void) for details on how MediaMatching works.

You can also call setMedia with no arguments to restore the default implementation.

Timer.runAllTimers(): void

Runs all system timers to completion.

Timer.runTimersToTime(time: number): void

Runs all system timers to the given time.

Fetch Mock

We use a version of fetch-mock that is augmented to ensure that it is properly unmocked after each test run. See the API of fetch-mock for more details.

Storage mock

The storage mocks are a bit different than the other mocks, because they serve primarily as a polyfill for the localStorage and sessionStorage APIs. The following standard API methods are implemented:

  • getItem
  • setItem
  • removeItrem
  • clear

Each of these are wrapped in a jest spy, which is automatically restored at the end of the test run.