mirror of
https://github.com/logto-io/logto.git
synced 2024-12-16 20:26:19 -05:00
test(ui): fix react-i18next warning in jest (#105)
This commit is contained in:
parent
806e99de61
commit
67cef28f27
1 changed files with 59 additions and 0 deletions
59
packages/ui/src/__mocks__/react-i18next.js
vendored
Normal file
59
packages/ui/src/__mocks__/react-i18next.js
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
// Copied from https://github.com/i18next/react-i18next/blob/c533ffe092470b58769586681abfc2cf4ecf0b56/example/test-jest/src/__mocks__/react-i18next.js
|
||||||
|
/* eslint-disable unicorn/prefer-module */
|
||||||
|
const React = require('react');
|
||||||
|
const reactI18next = require('react-i18next');
|
||||||
|
|
||||||
|
const hasChildren = (node) => node && (node.children || (node.props && node.props.children));
|
||||||
|
|
||||||
|
const getChildren = (node) =>
|
||||||
|
node && node.children ? node.children : node.props && node.props.children;
|
||||||
|
|
||||||
|
const renderNodes = (reactNodes) => {
|
||||||
|
if (typeof reactNodes === 'string') {
|
||||||
|
return reactNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Object.keys(reactNodes).map((key, i) => {
|
||||||
|
const child = reactNodes[key];
|
||||||
|
const isElement = React.isValidElement(child);
|
||||||
|
|
||||||
|
if (typeof child === 'string') {
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasChildren(child)) {
|
||||||
|
const inner = renderNodes(getChildren(child));
|
||||||
|
// eslint-disable-next-line react/no-array-index-key
|
||||||
|
return React.cloneElement(child, { ...child.props, key: i }, inner);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof child === 'object' && !isElement) {
|
||||||
|
return Object.keys(child).reduce((string, childKey) => `${string}${child[childKey]}`, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return child;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const useMock = [(k) => k, {}];
|
||||||
|
useMock.t = (k) => k;
|
||||||
|
useMock.i18n = {};
|
||||||
|
|
||||||
|
const withTranslation = (Component) => (props) => <Component t={(k) => k} {...props} />;
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
// This mock makes sure any components using the translate HoC receive the t function as a prop
|
||||||
|
withTranslation: () => withTranslation,
|
||||||
|
Trans: ({ children }) =>
|
||||||
|
Array.isArray(children) ? renderNodes(children) : renderNodes([children]),
|
||||||
|
Translation: ({ children }) => children((k) => k, { i18n: {} }),
|
||||||
|
useTranslation: () => useMock,
|
||||||
|
|
||||||
|
// Mock if needed
|
||||||
|
I18nextProvider: reactI18next.I18nextProvider,
|
||||||
|
initReactI18next: reactI18next.initReactI18next,
|
||||||
|
setDefaults: reactI18next.setDefaults,
|
||||||
|
getDefaults: reactI18next.getDefaults,
|
||||||
|
setI18n: reactI18next.setI18n,
|
||||||
|
getI18n: reactI18next.getI18n,
|
||||||
|
};
|
Loading…
Reference in a new issue