Typescript, Jest и i18next: не отображается текст в компоненте React

Я тестирую компонент React, который использует i18next для интернационализации.

Компонент:

import * as React from "react";
import { t } from "i18next";

export function Hello(_props) {
  return <div className="widget-header">
    {t("Hello, world!")}
  </div>;
}

Тест:

import * as React from "react";
import { render } from "enzyme";
import { Hello } from "./hello";

describe("<Hello />", () => {
  it("says hi", () => {
    let hi = render(<Hello />);
    // FAILS!
    // Expected "" to contain "Hello"
    expect(hi.text()).toContain("Hello");
  });
})

Я подозреваю, что Jest заглушает i18next.t(), чтобы вернуть undefined, а не "Hello, world!", но я в этом не уверен.

Я пытался unmock("i18next") безуспешно.

Как написать тесты для компонентов i18next в Jest?

ОБНОВЛЕНИЕ: я использовал Typescript в качестве компилятора. Похоже, что существует проблема с подъемом загрузчика, который я использую для Typescript (ES6 поднимает импортирует, jest.unmock нет — у пользователей Babel есть плагин для этого).


person Rick    schedule 20.04.2017    source источник
comment
Можете ли вы добавить console.log(t("Hello, world!")) свой файл, просто чтобы проверить, действительно ли проблема связана с i18next   -  person Andreas Köberle    schedule 21.04.2017


Ответы (1)


Не уверен, почему это не работает, но вы можете просто издеваться над i18next следующим образом:

jest.mock('i18next', () => ({
  t: (i) => i
}))
person Andreas Köberle    schedule 20.04.2017
comment
Спасибо, это работает. Похоже, моя проблема была с компилятором Typescript. Я обновил описание. - person Rick; 21.04.2017