Javascript 如何在RN中模拟本机模块
我尝试在react native中模拟模块Javascript 如何在RN中模拟本机模块,javascript,reactjs,react-native,mocking,jestjs,Javascript,Reactjs,React Native,Mocking,Jestjs,我尝试在react native中模拟模块NativeModules 为了避免在每次测试时复制和粘贴,我尝试创建一个“mocks/react native.js”文件,在其中模拟所讨论的模块。我发现这个教程很有帮助,但不起作用 这是我的模拟文件 import * as ReactNative from 'react-native'; export const NativeModules = { ...ReactNative.NativeModules, SettingsManager:
NativeModules
为了避免在每次测试时复制和粘贴,我尝试创建一个“mocks/react native.js”文件,在其中模拟所讨论的模块。我发现这个教程很有帮助,但不起作用
这是我的模拟文件
import * as ReactNative from 'react-native';
export const NativeModules = {
...ReactNative.NativeModules,
SettingsManager: {
settings: {
AppleLocale: 'en_US',
},
},
};
export const Platform = {
...ReactNative.Platform,
OS: 'ios',
Version: 123,
isTesting: true,
select: (objs) => objs.ios,
};
export const keyboardDismiss = jest.fn();
export const Keyboard = {
dismiss: keyboardDismiss,
};
export default Object.setPrototypeOf(
{
NativeModules,
Platform,
Keyboard,
},
ReactNative,
);
以下是产生的错误:
TypeError: Cannot read property 'create' of undefined
1 | import {StyleSheet} from 'react-native';
2 |
> 3 | export default StyleSheet.create({
TypeError: Cannot read property 'get' of undefined
您知道使用模拟文件模拟NativeModules
模块的另一种方法吗?
或
您知道如何解决这些错误吗?模拟应该定义
*
导入,而不是默认值。和ES模块*
导出
这应该通过使用CommonJS模块来完成,而无需通过原型继承来完成:
const ReactNative = require('react-native');
...
module.exports = {
...ReactNative,
__esModule: true,
NativeModules,
Platform,
Keyboard,
};
模拟应该定义导入,而不是默认导入。和ES模块*
导出
这应该通过使用CommonJS模块来完成,而无需通过原型继承来完成:
const ReactNative = require('react-native');
...
module.exports = {
...ReactNative,
__esModule: true,
NativeModules,
Platform,
Keyboard,
};
我已经根据你的例子修改了我的模拟,但是我有这个错误<代码>不变冲突:找不到TurboModuleRegistry.getEnforcing(…):“DevSettings”。验证此名称的模块是否已在本机二进制文件中注册。
我不知道如何解决此问题,如果没有模拟,它是否可行?答案用玩笑式模拟解决了这个问题,我不能保证RN在这些模拟中是可行的,因为它可能需要很好地理解RN的内部结构才能以正确的方式模拟它。至于这个错误,这似乎很常见,我已经根据你的例子修改了我的模拟,但是我遇到了这个错误<代码>不变冲突:找不到TurboModuleRegistry.getEnforcing(…):“DevSettings”。验证此名称的模块是否已在本机二进制文件中注册。我不知道如何解决此问题,如果没有模拟,它是否可行?答案用玩笑式模拟解决了这个问题,我不能保证RN在这些模拟中是可行的,因为它可能需要很好地理解RN的内部结构才能以正确的方式模拟它。至于错误,似乎很常见,