Cómo ejecutar y escribir pruebas
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Ejecución de pruebas
Esta sección trata sobre cómo probar tus cambios en React Native como colaborador. Si aún no lo has hecho, sigue los pasos para configurar tu entorno de desarrollo para construir proyectos con código nativo.
Pruebas de JavaScript
La forma más sencilla de ejecutar la suite de pruebas de JavaScript es usando el siguiente comando en la raíz de tu copia de React Native:
yarn test
Esto ejecutará pruebas usando Jest.
También debes asegurarte de que tu código pase las pruebas de Flow y lint:
yarn flow
yarn lint
Pruebas para iOS
Sigue las instrucciones del README.md en el directorio packages/rn-tester.
Luego, regresa a la raíz de tu copia de React Native y ejecuta yarn. Esto configurará tus dependencias de JavaScript.
En este punto, puedes ejecutar las pruebas de iOS invocando el siguiente script desde la raíz de tu copia de React Native:
./scripts/objc-test.sh test
You can also use Xcode to run iOS tests. Open RNTester/RNTesterPods.xcworkspace and run tests locally by pressing Command + U or selecting Product then Test from the menubar.
Xcode also allows running individual tests through its Test Navigator. You can also use Command + 6 shortcut.
objc-test.sh asegura que tu entorno de pruebas esté configurado para ejecutar todos los tests. También desactiva pruebas conocidas por ser inestables o fallidas. Ten esto en cuenta al ejecutar pruebas usando Xcode. Si ves un fallo inesperado, verifica primero si está desactivado en objc-test.sh.
Pruebas de Podfile/Ruby para iOS
Si estás modificando configuraciones del Podfile, existen pruebas en Ruby que pueden verificarlas.
Para ejecutar las pruebas de Ruby:
cd scripts
sh run_ruby_tests.sh
Pruebas para Android
Las pruebas unitarias de Android no se ejecutan en un emulador, sino en la JVM de tu máquina local.
Para ejecutar las pruebas unitarias de Android, invoca el siguiente script desde la raíz de tu copia de React Native:
./gradlew test
Escribiendo pruebas
Siempre que corrijas un error o agregues nueva funcionalidad a React Native, es buena idea añadir una prueba que lo cubra. Dependiendo del cambio que estés realizando, diferentes tipos de pruebas pueden ser apropiados.
Pruebas de JavaScript
Las pruebas de JavaScript se encuentran dentro de directorios __test__, ubicados junto a los archivos que se están probando. Consulta TouchableHighlight-test.js para ver un ejemplo básico. También puedes seguir el tutorial de Jest sobre Pruebas en aplicaciones React Native para aprender más.
Pruebas de integración para iOS
React Native proporciona herramientas para facilitar la prueba de componentes integrados que requieren comunicación entre componentes nativos y de JS a través del bridge.
Los dos componentes principales son RCTTestRunner y RCTTestModule. RCTTestRunner configura el entorno de React Native y proporciona herramientas para ejecutar las pruebas como XCTestCase en Xcode (runTest:module es el método más simple). RCTTestModule se exporta a JavaScript como NativeModules.TestModule.
Las pruebas en sí están escritas en JS y deben llamar a TestModule.markTestCompleted() cuando finalizan; de lo contrario, la prueba excederá el tiempo y fallará.
Los fallos en las pruebas se indican principalmente lanzando una excepción en JS. También es posible probar condiciones de error con runTest:module:initialProps:expectErrorRegex: o runTest:module:initialProps:expectErrorBlock:, que esperarán que se lance un error y verificarán que coincida con los criterios proporcionados.
Consulta los siguientes recursos para ver ejemplos de uso y puntos de integración:
Pruebas de instantáneas de iOS
Un tipo común de prueba de integración son las pruebas de instantáneas. Estas pruebas renderizan un componente y verifican capturas de pantalla comparándolas con imágenes de referencia usando TestModule.verifySnapshot(), utilizando internamente la biblioteca FBSnapshotTestCase. Las imágenes de referencia se registran estableciendo recordMode = YES en RCTTestRunner y luego ejecutando las pruebas.
Las instantáneas variarán ligeramente entre arquitecturas de 32 y 64 bits, y diferentes versiones de SO, por lo que se recomienda asegurarse de que las pruebas se ejecuten con la configuración correcta.
También se recomienda encarecidamente simular todos los datos de red, junto con otras dependencias potencialmente problemáticas. Consulta SimpleSnapshotTest para ver un ejemplo básico.
Si realizas un cambio que afecte una prueba de instantánea en una solicitud de extracción (pull request), como agregar un nuevo caso de ejemplo a uno de los ejemplos que se capturan, deberás volver a registrar la imagen de referencia.
Para hacer esto, cambia la bandera recordMode a _runner.recordMode = YES; en RNTester/RNTesterSnapshotTests.m, vuelve a ejecutar las pruebas fallidas, luego restablece record a NO y envía/actualiza tu solicitud de extracción mientras verificas si la compilación de CircleCI pasa.
Pruebas unitarias de Android
Es buena idea agregar una prueba unitaria de Android cuando trabajes en código que pueda probarse solo con código Java/Kotlin. Estas pruebas se encuentran en packages/react-native/ReactAndroid/src/test/.
Recomendamos revisarlas para tener una idea de cómo podría verse una buena prueba unitaria.
Pruebas continuas
Usamos CircleCI para ejecutar automáticamente nuestras pruebas de código abierto. CircleCI ejecutará estas pruebas cada vez que se agregue un commit a una solicitud de extracción, para ayudar a los mantenedores a determinar si un cambio introduce una regresión. Las pruebas también se ejecutan en commits a las ramas main y *-stable para monitorear su salud.
Existe otro conjunto de pruebas que se ejecutan en la infraestructura interna de pruebas de Meta. Algunas son pruebas de integración definidas por consumidores internos de React Native (por ejemplo, pruebas unitarias para una superficie de React Native en la aplicación de Facebook).
Estas pruebas se ejecutan en cada commit a la copia de React Native alojada en el control de código fuente de Facebook. También se ejecutan cuando una solicitud de extracción se importa al control de código fuente de Facebook.
Si alguna de estas pruebas falla, necesitarás que alguien en Meta revise el problema. Como solo los empleados de Meta pueden importar solicitudes de extracción, quien haya importado la solicitud debería poder facilitar los detalles necesarios.
Ejecutar pruebas de CI localmente: La mayoría de los colaboradores de código abierto dependen de CircleCI para ver los resultados. Si prefieres verificar tus cambios localmente usando la misma configuración que CircleCI, esta plataforma proporciona una interfaz de línea de comandos con capacidad para ejecutar trabajos localmente.
Preguntas frecuentes
¿Cómo actualizo la versión de Xcode utilizada en las pruebas de CI?
Al actualizar a una nueva versión de Xcode, primero asegúrate de que esté compatible con CircleCI.
También deberás actualizar la configuración del entorno de pruebas para asegurarte de que las pruebas se ejecuten en un simulador de iOS que venga instalado en la máquina de CircleCI.
Esta información también se puede encontrar en la referencia de versiones de Xcode de CircleCI haciendo clic en la versión deseada y buscando en Runtimes.
Luego puedes editar estos dos archivos:
-
.circleci/config.ymlEdita la línea
xcode:bajomacos:(busca_XCODE_VERSION). -
scripts/.tests.envEdita la variable de entorno
IOS_TARGET_OSpara que coincida con el entorno de ejecución de iOS deseado.
Si planeas fusionar este cambio en GitHub, asegúrate de notificar a un empleado de Meta, ya que necesitarán actualizar el valor de _XCODE_VERSION utilizado en la prueba interna de iOS para RN OSS de Sandcastle en react_native_oss.py cuando importen tu pull request.