这是我尝试使用 React Native 0.39 和 Jest 18 测试的一个简单组件:
// index.ios.js
import React, { Component } from 'react';
import { AppRegistry, NativeModules, View } from 'react-native';
export default class TestProject extends Component {
componentDidMount() {
NativeModules.TestModule.test();
}
render() {
return <View style={{ flex: 1 }} />;
}
}
AppRegistry.registerComponent('TestProject', () => TestProject);
这是 TestModule 及其 test
方法:
// ios/TestProject/TestModule.m
#import "TestModule.h"
@implementation TestModule
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(test){
NSLog(@"This is a test");
}
@end
以下测试失败并出现错误 TypeError: Cannot read property 'test' of undefined
:
// __tests__/index.ios.js
import 'react-native';
import renderer from 'react-test-renderer';
import React from 'react';
import Index from '../index.ios.js';
it('renders correctly', () => {
const tree = renderer.create(
<Index />
);
});
我已经阅读了关于如何 Mock native modules using jest.mock 的 Jest 文档,但我仍然不清楚如何扩展 Jest 的 NativeModules 模拟以包含我上面的 TestModule 类。
最佳答案
您可以简单地在您的原生模块所在的位置添加一个 mock:
import {
NativeModules,
} from 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';
describe('TestProject', () => {
beforeEach(() => {
NativeModules.TestModule = { test: jest.fn() }
});
...
});
关于ios - 如何测试使用 Jest 导入自定义 native 模块的 React Native 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41339996/