React Intl
Note
If you want to combine setupTests with another setup you should check
setup
Configuring React-Intl Polyfills / Locales
If you're using React-Intl in your project, and you need to load a locale, You have two options:
When using Node 13 and higher, Intl support is now out of the box. The default ICU (International Components for Unicode) option for Node is
full-icu
meaning all ICU's.
All you need to do is embed the set of ICU data you need:// test-utils.jsconst hasFullICU = () => {// That's the recommended way to test for ICU support according to Node.js docstry {const january = new Date(9e8)const pt = new Intl.DateTimeFormat('pt', { month: 'long' })return pt.format(january) === 'janeiro'} catch (err) {return false}}export const setupTests = () => {if (hasFullICU()) {Intl.NumberFormat.format = new Intl.NumberFormat('pt').formatIntl.DateTimeFormat.format = new Intl.DateTimeFormat('pt').format} else {global.Intl = IntlPolyfill}}When using Node with prior versions, the ICU default option is
small-icu
meaning it includes a subset of ICU data (typically only the English locale).
If you do need to load a locale you have two options:Load the Polyfills according to that language:
// test-utils.jsimport IntlPolyfill from 'intl'import 'intl/locale-data/jsonp/pt'export const setupTests = () => {// https://formatjs.io/docs/guides/runtime-requirements/#nodejsif (global.Intl) {Intl.NumberFormat = IntlPolyfill.NumberFormatIntl.DateTimeFormat = IntlPolyfill.DateTimeFormat} else {global.Intl = IntlPolyfill}}Load the ICU's at runtime:
Install the package full-icu and inject it to your test environment, you can do that by settingNODE_ICU_DATA
before calling jest:NODE_ICU_DATA=node_modules/full-icu jest
. Doing that you will give you full-icu support as shown in option 1.
Creating a custom render function
To test our translated component we can create a custom render
function using
the wrapper
option as explained in the
setup page.
Our custom render
function can look like this: