Testing Observable dengan RxTest

Muhammad Ridho K. Pratama
Ridho's Personal Note
2 min readMar 10, 2018

Setelah merefresh bagaimana caranya memakai RxSwift untuk keperluan development iOS, supaya tidak lupa dan blank. Saya sekalian aja belajar bagaimana melakukan testing Observable memakai RxTest.

Untuk studi kasusnya yaitu pada infinite scroll di UICollectionView pada aplikasi yang memanfaatkan API dari Pokeapi. Jadi, yang akan di test, apakah data pada collection view akan bertambah sebanyak 20 item, setiap menyentuh akhir dari UICollectionView. Misalkan saya punya view model sederhana seperti ini

Baiklah, kita mulai buat kasus ujinya dulu, sederhana saja…

Events : --(0, ())--(100, ())--(150, ())--(200, ())--(250, ())--->Expected result : 5 * 20 item = 100 item

Okay, bagaimana langkah menulis testnya?

  1. Buat test scheduler nya terlebih dahulu. Ini digunakan untuk melakukan proses simulasi subscribe ke observable keluaran.
  2. Buat mock observable yang akan digunakan untuk testing. Mock observable inilah sebagai input pada view model.
  3. Lalu lakukan assertion terhadap hasil transformasi dari view model terhadap kasus uji yang kita punya.

Sehingga test runner yang berhasil ditulis sebagai berikut

Baik, akan saya jelaskan satu per satu.

Bagian 1 itu bagaimana caranya kita buat schedulernya. Ini digunakan untuk menjalankan simulasi untuk subscribe ke observable keluaran dari view model.

Bagian 2 itu yang saya sebut diawal sebagai mock observable events. Isinya adalah rangkaian event yang akan digunakan pada observable, seperti next(element) , completed() , atau error(error) . Pada TestableObservable ini, ada 2 parameter untuk next , parameter pertama adalah virtual time kapan dia melakukan emitting item pada observable, parameter kedua ya item yang akan di emit ke observable. Dan dari mock observable events tadi kita akan buat mock observablenya.

Bagian 3, kita buat view modelnya, lalu mock observable tadi jadikan input pada view model untuk ditransformasikan.

Bagian 4, kita buat observer yang akan menerima nilai dari view model setelah proses transformasi. Pada saat ini, scheduler harus dijalankan supaya bisa merekam event hasil transformasi.

Terakhir di bagian 5 adalah proses assertion, untuk memastikan apakah rangkaian event pada observer yang dibuat di bagian 4 sama seperti dengan rangkaian event yang dibuat di bagian 5.

Penutup

XCTest dan RxTest berguna untuk melakukan testing kode program yang menggunakan RxSwift. Tulisan ini juga sebagai catatan pribadi saya untuk memulai memahami konsep bagaimana langkah² melakukan testing kode yang memanfaatkan RxSwift.

Repo kode lengkap diatas bisa diakses disini :)

--

--