jest-enzyme-selector-matchers

Jest matchers for asserting on the existence of elements matching selectors.

Usage no npm install needed!

<script type="module">
  import jestEnzymeSelectorMatchers from 'https://cdn.skypack.dev/jest-enzyme-selector-matchers';
</script>

README

jest-enzyme-selector-matchers

Jest matchers for asserting on the existence of elements matching selectors.

Installation

npm install --save-dev jest-enzyme-selector-matchers

These matchers assume the existence of Jest and Enzyme (unsurprisingly).

You'll also need to require the module and extend Jest's expectations:

const selectorMatchers = require('jest-enzyme-selector-matchers');

expect.extend(selectorMatchers);

Usage

Given an Enzyme wrapper element (anything with a .find method) you can make assertions such as:

expect(element).toContainSelector('button'); // basic search
expect(element).toContainSelector('div.myStyling'); // class selectors
expect(element).toContainSelector('CustomComponent'); // search by name, useful for shallow wrappers
expect(element).toContainSelector(CustomComponent); // search by component class
expect(element).toContainSelector('a[href="/target"]'); // attribute selectors
expect(element).toContainSelector(`img[src="${testImageUrl}"]`); // interpolated selectors
expect(element).not.toContainSelector('button'); // negation

...and anything else supported by the .find method.

The library also provides the matcher .toIncludeSelector, which uses .filter rather than .find. This can be useful if the wrapper you're asserting on contains multiple elements and you want to be able to find them at the top level (e.g. children of a React.fragment).

Internally the matchers use .find/.filter and check that at least one element is found. If no elements are found and the assertion fails, the failure output will take a stab at finding similar elements (by simplifying the selector).

License

This project is licensed under the Unlicense - see the LICENSE file for details