and*_*ngs 15 unit-testing facebook ios jestjs react-native
这是一个简单的组件,我试图使用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);
Run Code Online (Sandbox Code Playgroud)
这是TestModule及其test方法:
// ios/TestProject/TestModule.m
#import "TestModule.h"
@implementation TestModule
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(test){
NSLog(@"This is a test");
}
@end
Run Code Online (Sandbox Code Playgroud)
以下测试失败并显示错误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 />
);
});
Run Code Online (Sandbox Code Playgroud)
我已经阅读了有关如何使用jest.mock模拟本机模块的Jest文档,但是我仍然不清楚如何扩展Jest的NativeModules模拟以包含我的TestModule类.
rgo*_*ger 15
你可以简单地在你的原生模块应该添加一个模拟:
import {
NativeModules,
} from 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';
describe('TestProject', () => {
beforeEach(() => {
NativeModules.TestModule = { test: jest.fn() }
});
...
});
Run Code Online (Sandbox Code Playgroud)
这样,您将嘲笑它一次(在开玩笑开始之前)
jest.config.js
module.exports = {
preset: 'react-native',
setupFiles: ['./__mocks__/your-native-bridge.js']
};
Run Code Online (Sandbox Code Playgroud)
__mocks__/your-native-bridge.js
import {NativeModules} from 'react-native';
NativeModules.YourNativeBridge = {
property: jest.fn()
};
Run Code Online (Sandbox Code Playgroud)
不要忘记模拟所有可能的函数,属性 YourNativeBridge
| 归档时间: |
|
| 查看次数: |
7469 次 |
| 最近记录: |