UNPKG

@alexjeffburke/unexpected-react

Version:

Plugin for unexpected, to allow for assertions on the React.js virtual DOM, and the shallow and test renderers

54 lines (42 loc) 1.8 kB
This enables finding a particular component or element, to then perform further assertions on. e.g. ```js var renderer = createRenderer() renderer.render( <TodoList> <TodoItem id={1} label="Buy flowers for the wife"/> <TodoItem id={2} label="Mow the lawn"/> <TodoItem id={3} label="Buy groceries"/> </TodoList> ); expect( renderer, 'queried for', <TodoItem id={3}/>, 'to have rendered', <TodoItem label="Buy groceries"/> ); ``` Here the `TodoList` component is rendering a list of todo items. Here we're querying for the todo item with the id 3 and then we check that it has the expected text. This example show how you only mention exactly what you are searching for. If the assertion finds a match it is forwarded to the next assertion; otherwise it fails with a helpful message. You can use `to have rendered` or `to contain` with all the options as usual following a `queried for`. It is possible to use `queried for` to extract a part of a component. ```js#async:true return expect(renderer, 'queried for', <TodoItem id={3} />) .then(todoItem => { expect(todoItem.props.label, 'to equal', 'Buy groceries'); }); ``` Note that it is not possible to call an event using `with event` after using `queried for` in an assertion. This is because the `queried for` extracts the rendered output from the shallow renderer, so future events will be lost. ## queryTarget If you want to find a target nested inside a parent element, use `queryTarget` in the query. e.g. This `queried for` clause returns the `input` element inside the `div` with the class `add-new-item`. ```js expect(renderer, 'queried for', <div className="add-new-item"><input queryTarget /></div>, 'to have rendered', <input placeholder="Enter something to do" />); ```