测试 React Native 应用
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
在 Facebook,我们使用 Jest 测试 React Native 应用。
通过阅读以下系列文章深入了解实际 React Native 应用的测试实践:第一部分:Jest - 快照测试实战 和 第二部分:Jest - Redux 操作与还原器的快照测试。
环境配置
从 react-native 0.38 版本开始,运行 react-native init 时会默认包含 Jest 配置。以下配置将自动添加到您的 package.json 文件中:
{
"scripts": {
"test": "jest"
},
"jest": {
"preset": "react-native"
}
}
运行 yarn test 即可使用 Jest 执行测试。
如果您正在升级 React Native 应用,且之前使用了 jest-react-native 预设,请从 package.json 中移除该依赖,并将预设改为 react-native。
快照测试
让我们为一个简单的介绍组件创建快照测试,该组件包含若干视图、文本组件和样式:
import React, {Component} from 'react';
import {StyleSheet, Text, View} from 'react-native';
class Intro extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>Welcome to React Native!</Text>
<Text style={styles.instructions}>
This is a React Native snapshot test.
</Text>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
alignItems: 'center',
backgroundColor: '#F5FCFF',
flex: 1,
justifyContent: 'center',
},
instructions: {
color: '#333333',
marginBottom: 5,
textAlign: 'center',
},
welcome: {
fontSize: 20,
margin: 10,
textAlign: 'center',
},
});
export default Intro;
现在使用 React 的测试渲染器和 Jest 的快照功能与组件交互,捕获渲染输出并创建快照文件:
import React from 'react';
import renderer from 'react-test-renderer';
import Intro from '../Intro';
test('renders correctly', () => {
const tree = renderer.create(<Intro />).toJSON();
expect(tree).toMatchSnapshot();
});
当您运行 yarn test 或 jest 时,将生成如下输出文件:
exports[`Intro renders correctly 1`] = `
<View
style={
Object {
"alignItems": "center",
"backgroundColor": "#F5FCFF",
"flex": 1,
"justifyContent": "center",
}
}>
<Text
style={
Object {
"fontSize": 20,
"margin": 10,
"textAlign": "center",
}
}>
Welcome to React Native!
</Text>
<Text
style={
Object {
"color": "#333333",
"marginBottom": 5,
"textAlign": "center",
}
}>
This is a React Native snapshot test.
</Text>
</View>
`;
下次运行测试时,渲染输出会与先前创建的快照进行比较。快照文件应随代码变更一并提交。当快照测试失败时,您需要检查这是预期变更还是意外变更。如果是预期变更,可通过 jest -u 命令覆盖现有快照。
此示例代码可在 examples/react-native 查看。
预设配置
该预设会配置测试环境,其设计基于 Facebook 的经验总结,具有较强倾向性。所有配置选项均可覆盖,就像不使用预设时那样进行自定义。
环境配置
react-native 内置了 Jest 预设,因此您 package.json 中的 jest.preset 字段应指向 react-native。该预设模拟了 React Native 应用环境,由于不加载任何 DOM 或浏览器 API,能显著提升 Jest 的启动速度。