Как исправить `TypeError: Невозможно прочитать свойство 'type' из undefined` при тестировании i18next с Jest - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть реактивный проект, и я включил зависимости i18next = 15.0.4 и Reaction-i18next = 10.2.0. Я создал модуль для инициализации i18next с помощью activ-i18next, и я пытаюсь выполнить модульное тестирование этого кода с помощью Jest.

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

Вот мой модуль для i18n.ts

import i18next from "i18next";
import { initReactI18next } from "react-i18next";

const config = {
    resources: {
        en: {
            static: {},
        },
    },
    fallbackLng: "en",
    defaultNS: "static",
    ns: "static",
    interpolation: {
        prefix: "[",
        suffix: "]",
    },
};

i18next.use(initReactI18next).init(config);

export default i18next;

И я пытаюсь вызвать его из моего тестового кода следующим образом (i18n.test.ts):

import i18n from "./i18n";

describe("i18n", () => {

    it("should work fine", () => {
        const strings = {
            key: "value",
        };
        i18n.addResourceBundle("en", "static", strings, true, true);
    });
});

Я ожидаю, что этот тест пройдёт, но вместо этого я получаю следующую ошибку:

TypeError: Cannot read property 'type' of undefined
      at I18n.use (node_modules/i18next/dist/commonjs/i18next.js:257:18)

Что в основном указывает на этот код в i18next.js

    value: function use(module) {
      if (module.type === 'backend') {
        this.modules.backend = module;
      }

Как я могу исправить эту проблему?

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Попробуйте это:

const reactI18nextModule = require("react-i18next");

вместо

import { initReactI18next } from "react-i18next";

читайте немного больше о требовании против импорта для шутливого тестирования здесь:

Экспорт шутки по умолчанию - требуется импорт против

надеюсь, это поможет:)

0 голосов
/ 25 июня 2019

Возможно, вы сделали обновление с <= <code>V9 до> = V10.Потому что reactI18nextModule больше не доступен в> = V10.Попробуйте вместо этого использовать initReactI18next.

Для получения более подробной информации перейдите на https://react.i18next.com/latest/migrating-v9-to-v10

0 голосов
/ 04 апреля 2019

Отказ функции:

function use(module) {
      if (module.type === 'backend') { // cannot read `type` of `undefined`

Вывод: module - это undefined. Это исходит от:

i18next.use(initReactI18next)

Вывод: initReactI18next не определено. Это исходит от:

import { initReactI18next } from "react-i18next";

Вывод: initReactI18next не экспортируется из react-i18next

...