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

@hackney/mtfh-test-utils

v1.8.9

Published

Test utilities for LBH Modern Tools for Housing

Downloads

45

Readme

test-utils

Testing utilities for Jest utilising the @testing-library and mws frameworks.

Usage

Add the lib to jest config:

setupFilesAfterEnv: ["@testing-library/jest-dom", "@hackney/mtfh-test-utils"],

Render

You should always prefer to use the render method from this library when testing.

import { render } from "@hackney/mtfh-test-utils";

React Router Dom

The render method wraps tests in our custom ConfirmationRouter (see here)

render(<PageView />);

If your page requires path params to be defined, ie your component utilises useParams, useLocation etc, from react-router-dom.

render(<PageView />, {
  url: "/person/b7ab8dd3-b200-40b0-98e0-324781ec0832",
  path: "/person/:personId",
});

Media Queries

To render the view at a specific device size, you can initialise the options with one of the defined values.

render(<Button />, { query: "sm" });

The accepted queries are defined as the following:

const queries = {
  base: "(min-width: 0px) and (max-width: 479px)",
  sm: "(min-width: 480px) and (max-width: 767px)",
  md: "(min-width: 768px) and (max-width: 991px)",
  lg: "(min-width: 992px) and (max-width: 1279px)",
  xl: "(min-width: 1280px) and (max-width: 1535px)",
  "2xl": "(min-width: 1536px)",
};

Testing Accessibility

We expose a helper to test a dom/react element for accessibility using jest-axe

import { render, testA11y } from "@hackney/mtfh-test-utils";

test("it passes a11y", async () => {
  const { container } = render(<Button />);
  await testA11y(container);
});

Or directly

import { testA11y } from "@hackney/mtfh-test-utils";

test("it passes a11y", async () => {
  await testA11y(<Button />);
});

Options

You can pass both render and axe configuration to the second argument as described in jest-axe.

await testA11y(<Button />, {
    query: 'sm',
    axeOptions: {
        rules: {
            'color-contrast': { enabled: true }
        }
    }
);

API Mocks and Handlers

The library exposes a msw node server, with no existing handlers defined:

import { server } from "@hackney/mtfh-test-utils";

Default Api Handlers

To add any of the versioned api handlers create a test-utils.ts file in your project and define the following:

import { server, getPersonV1, getCommentsV2 } from "@hackney/mtfh-test-utils";

beforeEach(() => {
  server.use(getPersonV1(), getCommentsV2());
});

NB: Don't forget to add your test-utils.ts file to the setupFilesAfterEnv option in jest.config.ts.

Override Handlers

When testing components that use any api, you should be testing failures. To do so simply define the usage before the render:

import { render, server, getPersonV1 } from "@hackney/mtfh-test-utils";

test("it handles an unexpected error", async () => {
  server.use(getPersonV1("error", 500));
  render(<PersonView />, {
    url: "/person/b7ab8dd3-b200-40b0-98e0-324781ec0832",
    path: "/person/:personId",
  });
});

Using Mocks

This library exposes helpers (using faker) to help generate mock data.

import { generateMockPersonV1 } from "@hackney/mtfh-test-utils";

const mockPerson = generateMockPersonV1({
  firstName: "Test",
});

We also expose pre-generated mocks for usage with handlers. View the relevant api to see what is there.