酶装组件在i18n中有错误

时间:2018-01-05 08:44:05

标签: reactjs enzyme jest i18next

我在我的组件中使用i18n并将其包装在I18nextProvider中,如下所示:

  const wrapper = shallow(
    <I18nextProvider i18n={mockI18n}>
      <Component initState={initData} />
    </I18nextProvider>
  );

mockI18n是:

const mockI18n = {
  t(k) {
    return k;
  },
  on() {
  },
  getFixedT(k) {
    return (k) => k;
  },
  loadNamespaces(arg) {
    return (arg) => arg;
  }
};

当我使用浅色时这很好用。但是,我想测试一个onChange函数,所以我需要在嵌套的子组件中找到该元素并模拟click事件。浅是无法找到元素,所以我想尝试mount,但是我使用mount它会给我错误:

ReferenceError: t is not defined

      16 |             name="user_id"
    > 17 |             label={t('User ID')}
      18 |             type="text"
      19 |             value={this.state.user_id}

如何将i18n应用于子组件?或者如何测试this.props.onChange什么时候使用浅?

1 个答案:

答案 0 :(得分:0)

我认为在组件内部,您需要在使用翻译的组件中获取t函数。

const { t } = props; 

...

只有这样你才能调用t函数。

    label={t('User ID')}

https://react.i18next.com/getting-started.html