非常教程

React native参考手册

创建 | Contributing

Testing your Changes

本文档是关于测试您对React Native作出贡献的更改。如果您有兴趣测试React Native应用程序,请查看Jest网站上的React Native Tutorial。

React Native repo有几个可以运行的测试来验证你没有对你的PR进行回归。这些测试与Travis和Circle持续集成系统一起运行,该系统将自动注释带请求的测试结果。

无论您何时修复错误或向React Native添加新功能,都应该添加一个覆盖它的测试。根据您所做的更改,可能有适当的不同类型的测试。

  • JavaScript
  • Android
  • iOS
  • Apple TV
  • End-to-end tests
  • Website

JavaScript

Jest

Jest测试是在带有节点的命令行上运行的仅限JavaScript的测试。您可以运行现有的React Native jest测试:

$ cd react-native
$ npm test

当您正在进行只修改JavaScript代码的更改时,添加Jest测试是个不错的主意。

测试本身存在于__tests__他们测试的文件的目录中。看TouchableHighlight-test.js一个基本的例子。

Flow

你也应该确保你的代码通过流测试。这些可以运行使用:

$ cd react-native
$ npm run flow

Android

Unit Tests

Android单元测试不会在模拟器中运行。他们只是使用普通的Java安装。默认的macOS Java安装不够,您可能需要安装Java 8(JDK8)。您可以输入javac -version终端来查看您拥有的版本:

$ javac -version
javac 1.8.0_111

版本字符串1.8.x_xxx对应于JDK 8。

您还需要安装Buck构建工具。

运行Android单元测试:

$ cd react-native
$ ./scripts/run-android-local-unit-tests.sh

无论何时处理可由Java代码单独测试的代码,添加Android单元测试都是一个好主意。Android单元测试在下ReactAndroid/src/tests,所以你可以通过该目录浏览测试的好例子。

集成测试

要运行集成测试,您需要安装Android NDK。请参阅先决条件。

您还需要安装Buck构建工具。

我们建议在模拟器中运行Android集成测试,但您也可以使用真实的Android设备。使模拟器保持可见的窗口运行是一个不错的主意。这样,如果你的测试失败了,你可以看看模拟器进行调试。

某些设备和一些仿真器配置可能无法在测试中使用。我们确实维护一个可以工作的仿真器配置,作为测试的标准。运行这个模拟器配置:

$ cd react-native
$ ./scripts/run-android-emulator.sh

运行模拟器后,运行集成测试:

$ cd react-native
$ ./scripts/run-android-local-integration-tests.sh

集成测试应该只需几分钟即可在现代开发人员机器上运行。

无论何时您需要同时测试需要同时测试JavaScript和Java的代码时,添加Android集成测试是一个不错的主意。Android集成测试依赖于ReactAndroid/src/androidTest,因此您可以浏览该目录以获得测试的良好示例。

iOS

集成测试

React Native提供了一些工具,以便测试集成组件,这些组件需要本地组件和JS组件通过桥进行通信。这两个主要组件是RCTTestRunnerRCTTestModuleRCTTestRunner设置ReactNative环境,并提供工具XCTestCase在Xcode中运行测试(runTest:module是最简单的方法)。RCTTestModule被导出为JS NativeModules.TestModule

测试本身是用JS编写的,并且必须TestModule.markTestCompleted()在完成时调用,否则测试会超时并失败。测试失败主要是通过抛出JS异常来表示的。也可以测试错误条件,runTest:module:initialProps:expectErrorRegex:或者runTest:module:initialProps:expectErrorBlock:预期会抛出错误,并验证错误是否符合所提供的条件。

有关示例用法和集成点,请参阅以下内容:

  • IntegrationTestHarnessTest.js
  • RNTesterIntegrationTests.m
  • IntegrationTestsApp.js

您可以使用Xcode中IntegrationTest和RNTester应用程序中的cmd + U在本地运行集成测试,也可以在macOS上的命令行中运行以下命令:

$ cd react-native
$ ./scripts/objc-test-ios.sh

您的Xcode安装将带有运行最新操作系统的各种模拟器。您可能需要手动创建一个新的模拟器来匹配XCODE_DESTINATION测试脚本中的参数。

Screenshot/Snapshot Tests

快照测试是一种常见的集成测试类型。这些测试会渲染一个组件,并TestModule.verifySnapshot()使用FBSnapshotTestCase后台的库来验证屏幕快照与参考图像之间的关系。参考图像是通过设置记录recordMode = YESRCTTestRunner,然后运行测试。快照在32位和64位以及各种操作系统版本之间略有不同,因此建议您强制执行测试时使用正确的配置。强烈建议所有的网络数据都被嘲笑,以及其他潜在的麻烦依赖。看SimpleSnapshotTest一个基本的例子。

如果您进行影响PR中快照测试的更改,例如将新示例添加到其中一个快照样例中,则需要重新录制快照参考图像。为此,只需_runner.recordMode = YES;在RNTester / RNTesterSnapshotTests.m中更改为,重新运行失败的测试,然后将记录翻转回NO并提交/更新您的PR,然后等待Travis构建是否通过。

Apple TV

上面讨论的iOS测试也将在tvOS上运行。在RNTester Xcode项目中,选择RNTester-tvOS目标,然后按照上述步骤在Xcode中运行测试。

您可以通过在macOS上的命令行中运行以下命令来在本地运行Apple TV单元和集成测试:

$ cd react-native
$ ./scripts/objc-test-tvos.sh (make sure the line `TEST="test"` is uncommented)

端到端测试

最后,通过执行以下脚本确保端到端测试成功运行:

$ cd react-native
$ ./scripts/test-manual-e2e.sh

网站

React Native网站托管在GitHub页面上,并自动从Markdown源生成,以及JavaScript源文件中的注释。无论何时编辑文档,检查网站是否正确生成总是一个好主意。

$ cd website
$ npm install
$ npm start

然后在浏览器中打开http:// localhost:8079 / react-native / index.html。

React native

React Native 是一个 JavaScript 的框架,用来撰写实时的、可原生呈现 iOS 和 Android 的应用。

主页 https://facebook.github.io/react-native/
源码 https://github.com/facebook/react-native
发布版本 0.49

React native目录

1.开始 | Getting Started
2.指南 | Guides
3.APIs
4.组件:ActivityIndicator | Components: ActivityIndicator
5.组件:按钮 | Components: Button
6.组件:CheckBox | Components: CheckBox
7.组件:DatePickerIOS | Components: DatePickerIOS
8.组件:DrawerLayoutAndroid | Components: DrawerLayoutAndroid
9.组件:FlatList | Components: FlatList
10.组件:图像 | Components: Image
11.组件:KeyboardAvoidingView | Components: KeyboardAvoidingView
12.Components: ListView
13.Components: MaskedViewIOS
14.Components: Modal
15.Components: NavigatorIOS
16.Components: Picker
17.Components: PickerIOS
18.Components: ProgressBarAndroid
19.Components: ProgressViewIOS
20.Components: RefreshControl
21.Components: ScrollView
22.Components: SectionList
23.Components: SegmentedControlIOS
24.Components: Slider
25.Components: SnapshotViewIOS
26.Components: StatusBar
27.Components: Switch
28.Components: TabBarIOS
29.Components: TabBarIOS.Item
30.Components: Text
31.Components: TextInput
32.Components: ToolbarAndroid
33.Components: TouchableHighlight
34.Components: TouchableNativeFeedback
35.Components: TouchableOpacity
36.Components: TouchableWithoutFeedback
37.Components: View
38.Components: ViewPagerAndroid
39.Components: VirtualizedList
40.Components: WebView
41.创建 | Contributing
42.指南(Android) | Guides (Android)
43.指南(IOS) | Guides (iOS)
44.其他 | Miscellaneous