如何在 detox[react-native] 中使用 react-native-i18n

How to use react-native-i18n in detox[react-native]

我想测试 detox 中的警报消息,消息使用 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>)

然后我添加以下代码来开玩笑:

{
  "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/react-native/jest 中。 我不知道为什么会发生错误,有人可以帮助我吗? 谢谢

很可能是因为您使用的是旧版本node,请尝试更新并查看是否可以解决问题。此外,它与 Jest 完全无关,如果您对 Jest 单元测试没有任何问题,您可能应该恢复修改 Jest 设置的尝试;无论如何,它不会解决排毒问题。

如果您有某些要求或原因迫使您将 node 保持在特定的旧版本,您可以通过不同的方式执行测试来绕过它:只为 e2e 测试提供演示屏幕(或甚至为 e2e 创建一个完整的演示项目),在演示屏幕中你可以有一个按钮来执行你需要的 i18n (改变语言环境或其他),并且在 detox 测试中你点击这个"demo" 按钮,然后再测试您真正想要的内容。

我遇到了同样的问题。我通过导入 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()