«React-i18next: withNamespaces не является функцией» при тестировании

Я использую react-i18next в проекте машинописного текста. Я использовал translate() HOC, но он устарел, поэтому я перешел на withNamespaces(). Раньше все работало очень хорошо.

Теперь все работает нормально, когда я запускаю приложение, но во время тестов оно дает сбой:

FAIL  src/containers/MainMenu/MainMenu.test.tsx
Test suite failed to run

TypeError: react_i18next_1.withNamespaces is not a function

  at Object.<anonymous> (src/components/AppMenu/AppMenu.tsx:17:35)
  at Object.<anonymous> (src/components/AppMenu/index.ts:3:17)
  at Object.<anonymous> (src/containers/MainMenu/MainMenu.tsx:18:17)
  at Object.<anonymous> (src/containers/MainMenu/MainMenu.test.tsx:42:18)
  at process._tickCallback (internal/process/next_tick.js:68:7)

Вот мой компонент AppMenu:

Мое приложение представляет собой довольно стандартную установку Create-React-App.

import {TranslationFunction} from 'i18next';
import * as React from 'react';
import {withNamespaces, WithNamespaces} from 'react-i18next';
import {NavLink} from 'react-router-dom';

export interface IAppMenuProps extends WithNamespaces {
    items: IAppMenuItem[];
    t: TranslationFunction;
}

function AppMenu({items, t}: IAppMenuProps): JSX.Element {
    return (
        // ... some stuff here
    );
}

export default withNamespaces()(AppMenu);

И тестовый файл, который не работает:

import * as React from 'react';
import {BrowserRouter as Router} from 'react-router-dom';
import {create} from 'react-test-renderer';
import MainMenu from './MainMenu';

describe('MainMenu', () => {
    test('Snapshot test', async () => {
        const comp = create(
            <Router>
                <MainMenu />
            </Router>
        );

        expect(comp).toMatchSnapshot();
    });
});

Мое приложение представляет собой стандартную установку Create-React-App, поэтому тесты выполняются с шуткой.

Не могу найти, чего мне не хватает, чтобы заставить это работать, и почему он терпит неудачу во время тестов, а не во время выполнения.

Спасибо!


person Tdy    schedule 05.11.2018    source источник


Ответы (1)


Довольно глупая проблема. Я забыл, что у меня есть файл автоматического макета для реакции-i18next. Так что мне просто нужно было изменить функцию translate на withNamespaces в этом макете.

person Tdy    schedule 15.11.2018
comment
Не могли бы вы опубликовать свой макет, пожалуйста, потому что у меня такая же проблема - person Mohammad Fared; 07.09.2020
comment
@MohammadFared Мой макет слишком длинный, чтобы публиковать его в комментариях, но вы можете найти пример в официальном репозитории: github.com/i18next/react-i18next/blob/master/example/test-jest/ - person Tdy; 08.09.2020