Episode ini membahas testing dan tooling: Jest dengan React Native Testing Library untuk unit test, Detox untuk E2E, CI/CD dengan GitHub Actions, Fastlane dan EAS Build untuk distribusi, serta update over-the-air dengan EAS Update.

Makin banyak fitur, makin besar risiko satu perubahan kecil merusak yang lain. Tanpa test, regresi hanya terdeteksi saat user mengeluh di review store. Testing yang baik adalah jaring pengaman yang membuat tim berani mengubah kode.
Episode 20 membahas testing dan tooling di React Native: Jest dengan React Native Testing Library untuk unit test, Detox untuk end-to-end, CI/CD dengan GitHub Actions, Fastlane dan EAS Build untuk distribusi, serta update over-the-air dengan EAS Update.
Jest adalah test runner default project React Native. Untuk mengetes komponen, tambahkan React Native Testing Library:
npm install -D @testing-library/react-nativeTest komponen mensimulasikan interaksi user dan memeriksa hasilnya:
import { render, fireEvent } from "@testing-library/react-native";
import { Counter } from "./Counter";
test("counter bertambah saat tombol ditekan", () => {
const { getByText } = render(<Counter />);
fireEvent.press(getByText("Tambah"));
expect(getByText("1")).toBeTruthy();
});fireEvent.press(getByText("Tambah")) mensimulasikan ketukan tombol, lalu assertion memeriksa bahwa angka baru tampil. Test ini berjalan tanpa emulator — cukup cepat untuk dijalankan di setiap commit.
Unit test difokuskan pada logika dan perilaku: state berubah dengan benar, handler terpanggil dengan argumen yang tepat, dan kondisi loading atau error tampil sesuai. Jangan menguji detail implementasi seperti pemanggilan internal — uji perilaku yang bisa dilihat user.
Unit test tidak menangkap masalah integrasi antar layar atau interaksi dengan library native. Detox menjalankan aplikasi sungguhan di simulator atau emulator dan mengotomasi alur user:
npm install -D detox
npx detox initdescribe("alur login", () => {
it("berhasil masuk dengan kredensial valid", async () => {
await device.reloadReactNative();
await element(by.id("email")).typeText("user@example.com");
await element(by.id("password")).typeText("rahasia");
await element(by.id("login-button")).tap();
await expect(element(by.id("beranda"))).toBeVisible();
});
});element(by.id("email")) memilih elemen lewat testID — tambahkan testID di komponen agar test stabil. Detox menjalankan seluruh aplikasi, jadi perlu emulator dan build yang sesuai.
CI/CD menjalankan test dan build di setiap perubahan tanpa campur tangan manusia. Contoh workflow GitHub Actions:
name: ci
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm testWorkflow di atas menginstall dependency dan menjalankan unit test di setiap push ke main. Untuk Android, tambahkan job yang menjalankan build Gradle; untuk iOS, gunakan runner macOS.
Secret seperti signing key dan token akses disimpan di GitHub Secrets, bukan di kode. Pipeline membaca secret lewat variabel environment dan memakainya saat build — konsisten dengan kebiasaan dari episode 13.
Fastlane mengotomasi build dan distribusi aplikasi native: mengelola signing, build, upload ke TestFlight dan Play Console:
cd ios
bundle exec fastlane betafastlane beta menjalankan lane yang sudah dikonfigurasi di Fastfile — mengambil profile signing, membangun, dan mengunggah build.
Untuk project Expo, EAS Build menjalankan build native di cloud dengan profil per environment:
npx eas build --profile production --platform androidnpx eas build --profile production membangun APK atau AAB produksi di server EAS tanpa setup local native.
Perubahan kecil seperti perbaikan bug UI tidak perlu menunggu review store. EAS Update mengirim bundle JavaScript langsung ke perangkat:
npx eas update --channel production --message "perbaikan logout"Update ini hanya berlaku untuk kode JavaScript — perubahan native tetap butuh build store. Aturan praktis: perbaikan JS lewat OTA, perubahan native lewat build.
Warning
Update OTA bukan pengganti test. Kode yang di-download perangkat berjalan di produksi, jadi terapkan proses yang sama ketatnya dengan rilis store — test otomatis, staging, dan rollback yang jelas.
Episode 20 melengkapi rantai kualitas: Jest dan RNTL untuk unit test, Detox untuk E2E, CI/CD dengan GitHub Actions, Fastlane dan EAS Build untuk distribusi, serta EAS Update untuk perbaikan over-the-air.
Inti yang harus dibawa pulang:
Di episode 21 selanjutnya kita akan membahas fitur modern dan roadmap: rilis React Native 0.86 dan siklusnya, arah pengembangan New Architecture dan React 19, perbaikan aksesibilitas, serta posisi Expo SDK dan reactnative.directory di ekosistem.