测试时“ react-i18next:withNamespaces不是函数”

时间:2018-11-05 15:36:25

标签: reactjs jestjs create-react-app i18next react-i18next

我在一个打字稿项目上使用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安装,因此测试是在开玩笑地进行。

找不到我想让它正常工作的原因,以及为什么它在测试期间而不是在运行时失败。

谢谢!

1 个答案:

答案 0 :(得分:0)

一个非常愚蠢的问题。我忘了我有一个react-i18next的自动模拟文件。 因此,我只需要在此模拟中将translate函数更改为withNamespaces