如何在 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()
我想测试 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()