UNPKG

kitchensink

Version:

Dispatch's awesome components and style guide

116 lines (79 loc) 2.7 kB
# Enzyme Selectors Many methods in Enzyme's API accept a *selector* as an argument. Selectors in Enzyme can fall into one of the following four categories: ### 1. A Valid CSS Selector Enzyme supports a subset of valid CSS selectors to find nodes inside a render tree. Support is as follows: - class syntax (`.foo`, `.foo-bar`, etc.) - tag syntax (`input`, `div`, `span`, etc.) - id syntax (`#foo`, `#foo-bar`, etc.) - prop syntax (`[htmlFor="foo"]`, `[bar]`, `[baz=1]`, etc.); **Note -- Prop selector** Strings, numeric literals and boolean property values are supported for prop syntax in combination of the expected string syntax. For example, the following is supported: ```js const wrapper = mount( <div> <span foo={3} bar={false} title="baz" /> </div> ) wrapper.find('[foo=3]') wrapper.find('[bar=false]') wrapper.find('[title="baz"]') ``` Further, enzyme supports combining any of those supported syntaxes together to uniquely identify a single node. For instance: ```css div.foo.bar input#input-name label[foo=true] ``` Enzyme also gives support for the following contextual selectors ``` .foo .bar .foo > .bar .foo + .bar .foo ~ .bar .foo input ``` **Want more CSS support?** PR's implementing more support for CSS selectors will be accepted and is an area of development for enzyme that will likely be focused on in the future. ### 2. A React Component Constructor Enzyme allows you to find components based on their constructor. You can pass in the reference to the component's constructor: ```jsx class MyComponent extends React.Component { render() { ... } } // find instances of MyComponent const myComponents = wrapper.find(MyComponent); ``` ### 3. A React Component's displayName Enzyme allows you to find components based on a component's `displayName`. If a component exists in a render tree where it's `displayName` is set and has it's first character as a capital letter, a string can be used to find it: ```jsx class MyComponent extends React.Component { render() { ... } } MyComponent.displayName = 'MyComponent'; // find instances of MyComponent const myComponents = wrapper.find('MyComponent'); ``` NOTE: This will *only* work if the selector (and thus the component's `displayName`) is a string starting with a capital letter. Strings starting with lower case letters will assume it is a CSS selector using the tag syntax. ### 4. Object Property Selector Enzyme allows you to find components and nodes based on a subset of their properties: ```jsx const wrapper = mount( <div> <span foo={3} bar={false} title="baz" /> </div> ) wrapper.find({ foo: 3 }) wrapper.find({ bar: false }) wrapper.find({ title: 'baz'}) ```