@@ -68,6 +68,10 @@ facilitate testing implementation details). Read more about this in
68682 .   Specific to a testing framework (though we recommend Jest as our
6969    preference, the library works with any framework)
7070
71+ >  NOTE: This library is built on top of
72+ >  [ ` dom-testing-library ` ] ( https://github.com/kentcdodds/dom-testing-library ) 
73+ >  which is where most of the logic behind the queries is.
74+ 
7175## Table of Contents  
7276
7377<!--  START doctoc generated TOC please keep comment here to allow auto update --> 
@@ -79,17 +83,10 @@ facilitate testing implementation details). Read more about this in
7983  *  [ ` render ` ] ( #render ) 
8084  *  [ ` Simulate ` ] ( #simulate ) 
8185  *  [ ` wait ` ] ( #wait ) 
82- *  [ Custom Jest Matchers] ( #custom-jest-matchers ) 
83-   *  [ ` toBeInTheDOM ` ] ( #tobeinthedom ) 
84-   *  [ ` toHaveTextContent ` ] ( #tohavetextcontent ) 
85-   *  [ ` toHaveAttribute ` ] ( #tohaveattribute ) 
86-   *  [ Custom Jest Matchers - Typescript] ( #custom-jest-matchers---typescript ) 
8786*  [ ` TextMatch ` ] ( #textmatch ) 
8887*  [ ` query `  APIs] ( #query-apis ) 
8988*  [ Examples] ( #examples ) 
9089*  [ FAQ] ( #faq ) 
91- *  [ Deprecated APIs] ( #deprecated-apis ) 
92-   *  [ ` flushPromises ` ] ( #flushpromises ) 
9390*  [ Other Solutions] ( #other-solutions ) 
9491*  [ Guiding Principles] ( #guiding-principles ) 
9592*  [ Contributors] ( #contributors ) 
@@ -108,13 +105,17 @@ npm install --save-dev react-testing-library
108105
109106This library has a ` peerDependencies `  listing for ` react-dom ` .
110107
108+ You may also be interested in installing ` dom-testing-library `  so you can use
109+ [ the custom jest matchers] ( https://github.com/kentcdodds/dom-testing-library/blob/master/README.md#custom-jest-matchers ) 
110+ 
111111## Usage  
112112
113113``` javascript 
114114//  __tests__/fetch.js
115115import  React  from  ' react' 
116116import  {render , Simulate , wait } from  ' react-testing-library' 
117- import  ' react-testing-library/extend-expect' //  this adds custom expect matchers
117+ //  this add custom expect matchers from dom-testing-library
118+ import  ' dom-testing-library/extend-expect' 
118119import  axiosMock  from  ' axios' //  the mock lives in a __mocks__ directory
119120import  Fetch  from  ' ../fetch' //  see the tests for a full implementation
120121
@@ -312,94 +313,6 @@ The default `interval` is `50ms`. However it will run your callback immediately
312313on  the  next  tick  of  the  event  loop  (in  a  ` setTimeout ` ) before  starting  the 
313314intervals .
314315
315- ## Custom  Jest  Matchers 
316- 
317- There  are  two  simple  API  which  extend  the  ` expect `  API  of  jest  for  making  assertions  easier .
318- 
319- ### ` toBeInTheDOM ` 
320- 
321- This  allows  you  to  assert  whether  an  element  present  in  the  DOM  or  not .
322- 
323- ` ` ` javascript 
324- // add the custom expect matchers 
325- import 'react-testing-library/extend-expect' 
326- 
327- // ... 
328- const {queryByTestId} = render(<span data-testid="count-value">2</span>) 
329- expect(queryByTestId('count-value')).toBeInTheDOM() 
330- expect(queryByTestId('count-value1')).not.toBeInTheDOM() 
331- // ... 
332- ` ` ` 
333- 
334- >  Note : when  using  ` toBeInTheDOM ` , make  sure  you  use  a  query  function 
335- > (like  ` queryByTestId ` ) rather than a get function (like  ` getByTestId ` ).
336- > Otherwise the `get* ` function could throw an error before your assertion.
337- 
338- ### `toHaveTextContent`
339- 
340- This API allows you to check whether the given element has a text content or not.
341- 
342- ```javascript
343- //  add the custom expect matchers
344- 
345- 
346- //  ...
347- getByTestId } =  render (<span  data -testid =" count-value" 2 < / span > )
348- expect (getByTestId (' count-value' toHaveTextContent (' 2' 
349- expect (getByTestId (' count-value' not .toHaveTextContent (' 21' 
350- //  ...
351- ` ` ` 
352- 
353- ###  ` toHaveAttribute ` 
354- 
355- This allows you to check wether the given element has an attribute or not. You 
356- can also optionally check that the attribute has a specific expected value. 
357- 
358- ` ` ` javascript 
359- //  add the custom expect matchers
360- import  ' react-testing-library/extend-expect' 
361- 
362- //  ...
363- const  {getByTestId } =  render (
364-   < button  data - testid = " ok-button" type = " submit" disabled > 
365-     OK 
366-   < / button > ,
367- )
368- expect (getByTestId (' ok-button' toHaveAttribute (' disabled' 
369- expect (getByTestId (' ok-button' toHaveAttribute (' type' ' submit' 
370- expect (getByTestId (' ok-button' not .toHaveAttribute (' type' ' button' 
371- //  ...
372- ` ` ` 
373- 
374- ### Custom Jest Matchers - Typescript 
375- 
376- When you use custom Jest Matchers with Typescript, you will need to extend the type signature of  ` jest .Matchers <void >` , then cast the result of  ` expect `  accordingly. Here's a handy usage example: 
377- 
378- ` ` ` typescript 
379- //  this adds custom expect matchers
380- import  ' react-testing-library/extend-expect' 
381- interface  ExtendedMatchers  extends  jest .Matchers < void >  {
382-   toHaveTextContent : (htmlElement :  string ) =>  object 
383-   toBeInTheDOM : () =>  void 
384- }
385- test (' renders the tooltip as expected' async  () =>  {
386-   const 
387-     //  getByLabelText,
388-     getByText,
389-     //   getByTestId,
390-     container,
391-   } =  render (<Tooltip  label =" hello world" Child < / Tooltip > )
392-   //  tests rendering of the child
393-   getByText (' Child' 
394-   //  tests rendering of tooltip label
395-   ;(expect (getByText (' hello world' as  ExtendedMatchers ).toHaveTextContent (
396-     ' hello world' 
397-   )
398-   //  snapshots work great with regular DOM nodes!
399-   expect (container .firstChild ).toMatchSnapshot ()
400- })
401- ` ` ` 
402- 
403316## ` TextMatch ` 
404317
405318Several  APIs  accept  a  ` TextMatch `  which  can  be  a  ` string ` , ` regex `  or  a 
@@ -681,27 +594,6 @@ react components.
681594
682595</details >
683596
684- ## Deprecated APIs 
685- 
686- ###  ` flushPromises ` 
687- 
688- > This API was deprecated in favor of [ ` wait ` ](#wait). We try to avoid having 
689- > two ways to do the same thing and you can accomplish everything with  ` wait ` 
690- > that you could with  ` flushPromises ` . A big advantage of  ` wait ` , is that 
691- >  ` flushPromises `  will not flush promises that have not been queued up already, 
692- > for example, if they will queue up as a result of the initial promises. In 
693- > consequence of that, you might have to call  ` flushPromises `  multiple times to 
694- > get your components to your desired state. You can accomplish the exact same 
695- > behavior with  ` wait `  as you had with  ` flushPromises `  by calling  ` wait `  with 
696- > no arguments:  ` await  wait ()` 
697- 
698- This is a simple utility that's useful for when your component is doing some 
699- async work that you've mocked out, but you still need to wait until the next 
700- tick of the event loop before you can continue your assertions. It simply 
701- returns a promise that resolves in a  ` setImmediate ` . Especially useful when 
702- you make your test function an  ` async `  function and use 
703- ` await  flushPromises ()` . 
704- 
705597## Other  Solutions 
706598
707599In  preparing  this  project ,
0 commit comments