Testing your Changes

Testing your Changes

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

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

无论您何时修复错误或向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。