Как использовать реактив-native-i18n в детоксикации [реагировать-родной] - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу протестировать предупреждающее сообщение в режиме детоксикации и использовать i18n.

const i18n = require("react-native-i18n");

describe("Example", () => {
  beforeEach(async () => {
    await device.reloadReactNative();
  });

  it("should show hello screen after tap", async () => {
    await element(by.id("btnLogin")).tap();
    I18n.t(LocaleKeys.errorMsg_invalidUsername);
    await expect(element(by.text(I18n.t(LocaleKeys.errorMsg_invalidUsername)))).toBeVisible();
    // await expect(element(by.text("Please input the email and password."))).toBeVisible();
  });

});

Запустить тестирование и получить следующую ошибку.

Не удалось запустить комплект тестов

/Users/leogeng/Desktop/studentREP/student-app/node_modules/react-native-i18n/index.js:14
export const getLanguages = () => RNI18n.getLanguages();
^^^^^^

SyntaxError: Unexpected token export

  at ScriptTransformer._transformAndBuildScript (../node_modules/jest-runtime/build/script_transformer.js:305:17)
  at Object.<anonymous> (firstTest.spec.js:1:114)
      at Generator.next (<anonymous>)

Затем я добавляю следующий код для jest:

{
  "preset": "react-native",
  "transformIgnorePatterns": [
    "/node_modules/(?!(react-native(.*)?/|native-base(.*)?/|react-navigation/))"
  ]
}

и снова получаю сообщение об ошибке:

 Validation Error:

  Module <rootDir>/node_modules/react-native/jest/setup.js in the setupFiles option was not found.

На самом деле я подтверждаю 'setup, js' существует в node_modules /реагирует родной / шутку.Я не знаю, почему происходит ошибка, кто-нибудь может мне помочь?Спасибо

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

У меня была такая же проблема.Я разрешаю это, импортируя i18n-js вместо react-native-i18n.

Поскольку react-native-i18n не является простой структурой javascript, Detox не может импортировать его.

Но react-native-i18nиспользует i18n-js, поэтому вы можете без проблем получать доступ к своим переводам

const I18n = require('i18n-js')

// and then you can use it for your tests
...
await element(by.text( I18n.t('hello') )).tap()
0 голосов
/ 13 сентября 2018

Скорее всего, это потому, что вы используете старую версию node, попробуйте обновить и посмотреть, решит ли это проблему. Кроме того, он совершенно не связан с Jest, и вам, вероятно, следует отменить попытки изменить настройки Jest, если у вас нет проблем с модульными тестами Jest; в любом случае, это не решит проблемы детоксикации.

Если у вас есть какое-то требование или причина, заставляющая вас сохранить node в конкретной старой версии, вы можете обойти ее, выполнив тест по-другому: иметь демонстрационный экран только для тестов e2e (или даже создать целое). демонстрационный проект только для e2e), на демонстрационном экране у вас может быть кнопка, которая выполняет то, что вам нужно, с помощью i18n (смена локали или чего-либо другого), а в тесте detox вы нажимаете эту кнопку «демо» перед проверкой того, что вы на самом деле хочу.

...