@@ -8,19 +8,22 @@ sidebar_label: Setup
88demonstrated in the example above). However, there are some things you can do
99when configuring your testing framework to reduce some boilerplate. In these
1010docs we'll demonstrate configuring Jest, but you should be able to do similar
11- things with any testing framework (react-testing-library does not require that 
12- you use Jest).
11+ things with [ any testing framework] ( #using-without-jest )  (react-testing-library
12+ does not require that  you use Jest).
1313
1414## Global Config  
1515
16- There are several options you can add to your global test config that simplify
17- the setup and teardown of tests in individual files. For example, you can ensure
18- [ ` cleanup ` ] ( ./api#cleanup )  is called after each test and import additional
19- assertions.
16+ Adding options to your global test config can simplify the setup and teardown of
17+ tests in individual files.
2018
21- To do this with Jest 24 and up, you can add the
19+ ### Cleanup  
20+ 
21+ You can ensure [ ` cleanup ` ] ( ./api#cleanup )  is called after each test and import
22+ additional assertions by adding it to the setup configuration in Jest.
23+ 
24+ In Jest 24 and up, add the
2225[ ` setupFilesAfterEnv ` ] ( https://jestjs.io/docs/en/configuration.html#setupfilesafterenv-array ) 
23- option to your Jest config. 
26+ option to your Jest config: 
2427
2528``` javascript 
2629//  jest.config.js
@@ -33,10 +36,10 @@ module.exports = {
3336}
3437``` 
3538
36- ### Older versions of Jest  
37- 
3839<details >
3940
41+ <summary >Older versions of Jest</summary >
42+ 
4043Jest versions 23 and below use the
4144[ ` setupTestFrameworkScriptFile ` ] ( https://jestjs.io/docs/en/23.x/configuration#setuptestframeworkscriptfile-string ) 
4245option in your Jest config instead of ` setupFilesAfterEnv ` . This setup file can
@@ -72,7 +75,11 @@ It's often useful to define a custom render method that includes things like
7275global context providers, data stores, etc. To make this available globally, one
7376approach is to define a utility file that re-exports everything from
7477` react-testing-library ` . You can replace react-testing-library with this file in
75- all your imports.
78+ all your imports. See [ below] ( #comfiguring-jest-with-test-utils )  for a way to
79+ make your test util file accessible without using relative paths.
80+ 
81+ The example below sets up data providers using the
82+ [ ` wrapper ` ] ( api.md#render-options )  option to ` render ` .
7683
7784``` diff 
7885// my-component.test.js
@@ -87,27 +94,64 @@ import { ThemeProvider } from 'my-ui-lib'
8794import  { TranslationProvider  } from  ' my-i18n-lib' 
8895import  defaultStrings  from  ' i18n/en-x-default' 
8996
90- const  customRender  =  (node ,  options ) =>  {
91-  return  render (
97+ const  AllTheProviders  =  ({ children } ) =>  {
98+  return  (
9299 < ThemeProvider theme= " light" > 
93100 < TranslationProvider messages= {defaultStrings}> 
94-  {node }
101+  {children }
95102 < / TranslationProvider> 
96-  < / ThemeProvider> ,
97-  options
103+  < / ThemeProvider> 
98104 )
99105}
100106
107+ const  customRender  =  (ui , options ) => 
108+  render (ui, { wrapper:  AllTheProviders, ... options })
109+ 
101110//  re-export everything
102111export  *  from  ' react-testing-library' 
103112
104113//  override render method
105114export  { customRender  as  render  }
106115``` 
107116
108- To make this file accessible without using relative imports, add the folder
109- containing the file to the Jest ` moduleDirectories `  option. Note: this will make
110- _ all_  the .js files in that directory importable without ` ../ ` .
117+ >  ** Note** 
118+ > 
119+ >  Babel versions lower than 7 throw an error when trying to override the named
120+ >  export in the example above. See
121+ >  [ #169  ] ( https://github.com/kentcdodds/react-testing-library/issues/169 )  and the
122+ >  workaround below.
123+ 
124+ <details >
125+ <summary >Workaround for Babel 6</summary >
126+ 
127+ You can use CommonJS modules instead of ES modules, which should work in Node:
128+ 
129+ ``` js 
130+ //  test-utils.js
131+ const  rtl  =  require (' react-testing-library' 
132+ 
133+ const  customRender  =  (ui , options ) => 
134+  rtl .render (ui, {
135+  myDefaultOption:  ' something' 
136+  ... options,
137+  })
138+ 
139+ module .exports  =  {
140+  ... rtl,
141+  render:  customRender,
142+ }
143+ ``` 
144+ 
145+ </details >
146+ 
147+ ### Configuring Jest with Test Utils  
148+ 
149+ To make your custom test file accessible in your Jest test files without using
150+ relative imports (` ../../test-utils ` ), add the folder containing the file to the
151+ Jest ` moduleDirectories `  option.
152+ 
153+ This will make all the ` .js `  files in the test-utils directory importable
154+ without ` ../ ` .
111155
112156``` diff 
113157// my-component.test.js
@@ -128,9 +172,11 @@ module.exports = {
128172}
129173``` 
130174
131- If your project is based on top of Create React App, to make the file accessible
132- without using relative imports, you just need to create a ` .env `  file in the
133- root of your project with the following configuration:
175+ ### Jest and Create React App  
176+ 
177+ If your project is based on top of Create React App, to make the ` test-utils ` 
178+ file accessible without using relative imports, you just need to create a ` .env ` 
179+ file in the root of your project with the following configuration:
134180
135181``` 
136182// Create React App project structure 
@@ -151,54 +197,6 @@ $ app
151197NODE_PATH=src/utils 
152198``` 
153199
154- There is the case when you want to wrap your components in a ` Provider ` , this
155- might cause conflicts when ` rerender ` ed. To achieve this, we suggest the
156- ` rerender `  should be implemented the same way custom queries, by changing the
157- return value of the customRender.
158- 
159- ``` js 
160- //  test-utils.js
161- 
162- const  customRender  =  (ui , options ) =>  {
163-  const  rendered  =  render (< div> {ui}< / div> , options)
164-  return  {
165-  ... rendered,
166-  rerender :  newUi  => 
167-  customRender (newUi, {
168-  container:  rendered .container ,
169-  baseElement:  rendered .baseElement ,
170-  }),
171-  }
172- }
173- ``` 
174- 
175- ### Export Issue with Babel Versions Lower Than 7  
176- 
177- Babel versions lower than 7 throw an error when trying to override the named
178- export in the example above. (See
179- [ #169  ] ( https://github.com/kentcdodds/react-testing-library/issues/169 ) .)
180- 
181- <details >
182- <summary >Workaround</summary >
183- 
184- You can use CommonJS modules instead of ES modules, which should work in Node:
185- 
186- ``` js 
187- //  test-utils.js
188- const  rtl  =  require (' react-testing-library' 
189- 
190- const  customRender  =  (node , options ) =>  {
191-  return  rtl .render (< Something> {node}< / Something> )
192- }
193- 
194- module .exports  =  {
195-  ... rtl,
196-  render:  customRender,
197- }
198- ``` 
199- 
200- </details >
201- 
202200## Using without Jest  
203201
204202If you're running your tests in the browser bundled with webpack (or similar)
0 commit comments